sql >> Base de Datos >  >> RDS >> Mysql

SQL devuelve 1,0 en una nueva variable según el caso cuando la declaración se refiere a muchas otras variables

  • Dado que no hay una clave principal definida, asumo que los datos se ingresan en orden secuencial en creation_date y ladder_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 de Select 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 el ladder_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            |

Ver en DB Fiddle