- Étant donné qu'aucune clé primaire n'est définie, je suppose que les données sont saisies dans un ordre séquentiel le
creation_date
etladder_level
. Rappelez-vous ces données sont stockées de manière désordonnée dans MySQL. - Tout d'abord, nous devons utiliser une requête de sous-sélection pour obtenir les données dans l'ordre requis (comme indiqué à l'étape précédente). Il est à noter que
Order By
est exécuté aprèsSelect
clause; nous devrons donc d'abord trier les données, puis utiliser le jeu de résultats comme Table dérivée . - Maintenant, nous allons prendre l'aide de User- variables définies
(persistant au niveau de la session et accessible). Dans une autre table dérivée
user_init_vars
, nous les initialisons. - Dans le
Select
clause, nous comparons la valeur de la ligne actuelle à la valeur de la ligne précédente. Après comparaison, nous définissons la valeur de la variable sur la valeur de la ligne actuelle. Vous pouvez considérer cela comme une technique de bouclage, que nous utilisons dans d'autres langages de programmation comme PHP, C++, Java, etc. Case .. When
les expressions sont utilisées pour la comparaison et la détermination duladder_change
valeur.
Requête 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 |