- Eftersom det inte finns någon definierad primärnyckel antar jag att data läggs in i sekventiell ordning på
creation_date
ochladder_level
. Kom ihåg att data lagras på oordnat sätt i MySQL. - För det första måste vi använda en undervalsfråga för att få data i önskad ordning (som markerats i föregående steg). Det är anmärkningsvärt att
Order By
exekveras efterSelect
klausul; så vi måste först få uppgifterna sorterade och sedan använda resultatuppsättningen som en Härledd tabell . - Nu tar vi hjälp av Användar- definierade variabler
(beständig och tillgänglig på sessionsnivå). I en annan härledd tabell
user_init_vars
, initialiserar vi dem. - I
Select
sats, jämför vi den aktuella radens värde med föregående radvärde. Efter jämförelse ställer vi in variabelvärdet till den aktuella radens värde. Du kan se det som looping-teknik, som vi använder i andra programmeringsspråk som PHP, C++, Java etc. Case .. When
uttryck används för jämförelse och bestämning avladder_change
värde.
Fråga #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 |