- Dado que no hay una clave principal definida, asumo que los datos se ingresan en orden secuencial en
creation_date
yladder_level
. Recuerda esos datos se almacenan de forma desordenada en MySQL. - En primer lugar, tenemos que usar una consulta de subselección para obtener los datos en el orden requerido (como se destacó en el paso anterior). Cabe destacar que
Order By
se ejecuta después deSelect
cláusula; por lo tanto, primero debemos ordenar los datos y luego usar el conjunto de resultados como Tabla derivada . - Ahora, tomaremos la ayuda de User- variables definidas
(persistente a nivel de sesión y accesible). En otra tabla derivada
user_init_vars
, los inicializamos. - En el
Select
cláusula, comparamos el valor de la fila actual con el valor de la fila anterior. Después de la comparación, establecemos el valor de la variable en el valor de la fila actual. Puede considerarlo como una técnica de bucle, que usamos en otros lenguajes de programación como PHP, C++, Java, etc. Case .. When
las expresiones se utilizan para comparar y determinar elladder_change
valor.
Consulta #1
SELECT
dt.ID,
CASE WHEN DATE(@rd) <> DATE(dt.record_date) AND
dt.ladder_level > @ll
THEN 1
ELSE 0
END AS ladder_change,
@rd := dt.record_date AS record_date,
@ll := dt.ladder_level AS ladder_level
FROM (SELECT ID, record_date, ladder_level
FROM conv_example
ORDER BY ID, record_date, ladder_level) AS dt
CROSS JOIN (SELECT @rd := '',
@ll := '') AS user_init_vars;
| ID | ladder_change | record_date | ladder_level |
| ----- | ------------- | ------------------- | ------------ |
| 324 | 0 | 2016-09-15 00:00:00 | a |
| 324 | 0 | 2016-09-15 00:00:00 | b |
| 324 | 0 | 2017-04-07 00:00:00 | b |
| 324 | 0 | 2017-04-07 00:00:00 | c1 |
| 324 | 0 | 2018-09-08 00:00:00 | c1 |
| 324 | 0 | 2018-09-08 00:00:00 | e |
| 1234 | 0 | 2013-04-03 00:00:00 | |
| 1234 | 0 | 2014-07-03 00:00:00 | a |
| 1234 | 1 | 2015-04-01 00:00:00 | b |
| 1234 | 1 | 2016-09-15 00:00:00 | d |
| 1234 | 0 | 2017-02-04 00:00:00 | b |
| 1234 | 0 | 2017-04-03 00:00:00 | b |
| 1234 | 1 | 2017-04-07 00:00:00 | c1 |
| 1234 | 1 | 2018-09-08 00:00:00 | e |
| 31431 | 0 | 2013-04-03 00:00:00 | |
| 31431 | 0 | 2014-07-03 00:00:00 | a |
| 31431 | 1 | 2017-04-07 00:00:00 | c1 |
| 31431 | 1 | 2018-09-08 00:00:00 | e |