- Da kein Primärschlüssel definiert ist, gehe ich davon aus, dass die Daten am
creation_date
in sequentieller Reihenfolge eingegeben werden undladder_level
. Denken Sie daran dass Daten in MySQL ungeordnet gespeichert werden. - Zunächst müssen wir eine Unterauswahlabfrage verwenden, um die Daten in der erforderlichen Reihenfolge zu erhalten (wie im vorherigen Schritt hervorgehoben). Es ist bemerkenswert, dass
Order By
wird nachSelect
ausgeführt Klausel; also müssen wir zuerst die Daten sortieren und dann die Ergebnismenge als Abgeleitete Tabelle . - Jetzt nehmen wir die Hilfe von User- definierte Variablen
(persistent und zugänglich auf Sitzungsebene). In einer anderen abgeleiteten Tabelle
user_init_vars
, wir initialisieren sie. - In der
Select
-Klausel vergleichen wir den Wert der aktuellen Zeile mit dem Wert der vorherigen Zeile. Nach dem Vergleich setzen wir den Variablenwert auf den Wert der aktuellen Zeile. Sie können es sich als Schleifentechnik vorstellen, die wir in anderen Programmiersprachen wie PHP, C++, Java usw. verwenden. Case .. When
Ausdrücke werden zum Vergleich und zur Bestimmung desladder_change
verwendet Wert.
Abfrage 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 |