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

MySQL-Auswahlzeile, wenn sich der Spaltenwert geändert hat

MySQL user defined variables würde Ihnen in diesem Fall helfen.

Jedes Mal, wenn Sie einen neuen Status sehen, weisen Sie 1 zu als Zeilennummer in die entsprechende Zeile.

Und wenn Sie denselben Status wie in der vorherigen Zeile sehen, weisen Sie stattdessen eine erhöhte Zeilennummer zu.

Auf diese Weise können Sie endlich die Datensätze mit row number = 1 filtern nur. Diese speziellen Datensätze zeigen tatsächlich einen Unterschied im Vergleich zu ihrer unmittelbar vorherigen Zeile

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