sql >> Base de Datos >  >> RDS >> Mysql

Mysql selecciona la fila cuando cambia el valor de la columna

MySQL user defined variables te ayudaría en este caso.

Cada vez que vea un nuevo estado asigne 1 como número de fila a la fila correspondiente.

Y si ve el mismo estado que vio en la fila anterior, asigne un número de fila incrementado en su lugar.

De esta manera, finalmente puede filtrar los registros que tienen row number = 1 solamente. Estos registros particulares en realidad muestran una diferencia en comparación con su fila anterior inmediata

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