- Da der ikke er defineret en primær nøgle, antager jeg, at data indtastes i sekventiel rækkefølge på
creation_date
ogladder_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 efterSelect
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 bestemmeladder_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 |