Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Mysql seleciona linha quando o valor da coluna é alterado


MySQL user defined variables ajudaria neste caso.

Sempre que você ver um novo status, atribua 1 como número de linha para a linha correspondente.

E se você vir o mesmo status que viu na linha anterior, atribua um número de linha incrementado.

Dessa forma, você pode finalmente filtrar os registros com row number = 1 só. Esses registros específicos estão realmente mostrando diferença em comparação com a linha anterior imediata
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