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

Mysql sélectionne la ligne lorsque la valeur de la colonne a changé

MySQL user defined variables vous aiderait dans ce cas.

Chaque fois que vous voyez un nouveau statut, attribuez 1 comme numéro de ligne à la ligne correspondante.

Et si vous voyez le même statut que celui que vous avez vu dans la ligne précédente, attribuez plutôt un numéro de ligne incrémenté.

De cette façon, vous pouvez enfin filtrer les enregistrements ayant row number = 1 seul. Ces enregistrements particuliers montrent en fait une différence par rapport à leur ligne précédente immédiate

SELECT 
*
FROM 
(
 SELECT 
  *,
  IF(@prevStatus = YT.status_1, @rn := @rn + 1,
    IF(@prevStatus := YT.status_1, @rn := 1, @rn := 1)
  ) AS rn
 FROM your_table YT
 CROSS JOIN 
 (
  SELECT @prevStatus := -1, @rn := 1
 ) AS var 
 ORDER BY YT.ID
) AS t
WHERE t.rn = 1
ORDER BY t.ID