Mysql
 sql >> Database >  >> RDS >> Mysql

SQL Restituisce 1,0 nella nuova variabile in base all'istruzione case when riferita a più altre variabili

  • Dato che non è stata definita una chiave primaria, presumo che i dati siano inseriti in ordine sequenziale su creation_date e ladder_level . Ricorda quei dati sono archiviati in modo non ordinato in MySQL.
  • In primo luogo, dobbiamo utilizzare una query di selezione secondaria per ottenere i dati nell'ordine richiesto (come evidenziato nel passaggio precedente). È interessante notare che Order By viene eseguito dopo Select clausola; quindi dovremo prima ordinare i dati e quindi utilizzare il set di risultati come Tabella derivata .
  • Ora ci avvarremo dell'aiuto di User- variabili definite (persistente e accessibile a livello di sessione). In un'altra tabella derivata user_init_vars , li inizializziamo.
  • Nel Select clausola, confrontiamo il valore della riga corrente con il valore della riga precedente. Dopo il confronto, impostiamo il valore della variabile sul valore della riga corrente. Puoi pensarla come una tecnica di loop, che usiamo in altri linguaggi di programmazione come PHP, C++, Java ecc.
  • Case .. When le espressioni vengono utilizzate per il confronto e per determinare il ladder_change valore.

Richiesta n. 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            |

Visualizza su DB Fiddle