Mysql
 sql >> Base de données >  >> RDS >> Mysql

SQL renvoie 1,0 dans une nouvelle variable basée sur la casse lorsque l'instruction fait référence à plusieurs autres variables

  • É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 et ladder_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ès Select 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 du ladder_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            |

Voir sur DB Fiddle