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

SQL Returnerer 1,0 i ny variabel baseret på tilfælde, når sætningen henviser til flere andre variabler

  • Da der ikke er defineret en primær nøgle, antager jeg, at data indtastes i sekventiel rækkefølge på creation_date og ladder_level . Husk at data gemmes på uordnet måde i MySQL.
  • For det første skal vi bruge en undervalgsforespørgsel for at få dataene i den påkrævede rækkefølge (som fremhævet i forrige trin). Det er bemærkelsesværdigt, at Order By udføres efter Select klausul; så vi bliver nødt til først at få dataene sorteret og derefter bruge resultatsættet som en Afledt tabel .
  • Nu vil vi tage hjælp fra Bruger- definerede variable (vedvarende og tilgængelig på sessionsniveau). I en anden afledt tabel user_init_vars , initialiserer vi dem.
  • I Select klausul sammenligner vi den aktuelle rækkes værdi med den forrige rækkeværdi. Efter sammenligning sætter vi variabelværdien til den aktuelle rækkes værdi. Du kan tænke på det som looping-teknik, som vi bruger i andre programmeringssprog som PHP, C++, Java osv.
  • Case .. When udtryk bruges til sammenligning og til at bestemme ladder_change værdi.

Forespørgsel #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            |

Se på DB Fiddle




  1. HVIS FINDER tilstand, der ikke fungerer med PLSQL

  2. Sådan gættes skema i Mysqlinput på farten i Talend

  3. Hvordan hjælper pgBouncer med at sætte fart på Django

  4. Brug af data beskyttet med en brugerdefineret nøglebutik fra Linux