Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL Gibt 1,0 in einer neuen Variablen zurück, basierend auf dem Fall, wenn die Anweisung auf mehrere andere Variablen verweist

  • Da kein Primärschlüssel definiert ist, gehe ich davon aus, dass die Daten am creation_date in sequentieller Reihenfolge eingegeben werden und ladder_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 nach Select 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 des ladder_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            |

Auf DB Fiddle ansehen