sql >> Database teknologi >  >> RDS >> Mysql

SQL:valg af rækker, hvor kolonneværdien er ændret fra forrige række

SELECT a.* FROM tableX AS a WHERE a.StatusA <> ( SELECT b.StatusA FROM tableX AS b WHERE a.System = b.System AND a.Timestamp > b.Timestamp ORDER BY b.Timestamp DESC LIMIT 1 )

Men du kan også prøve dette (med et indeks på (System,Timestamp) :

SELECT System, Timestamp, StatusA, StatusB
FROM
  ( SELECT (@statusPre <> statusA AND @systemPre=System) AS statusChanged
         , System, Timestamp, StatusA, StatusB
         , @statusPre := StatusA
         , @systemPre := System
    FROM tableX
       , (SELECT @statusPre:=NULL, @systemPre:=NULL) AS d
    ORDER BY System
           , Timestamp
  ) AS good
WHERE statusChanged ;
 


  1. Hurtigste måde at fjerne ikke-numeriske tegn fra en VARCHAR i SQL Server

  2. Hvad er standard begrænsningsnavnet i PostgreSQL?

  3. Hvilken SQL-forespørgsel er bedre, MATCH MOD eller LIKE?

  4. SQL Server dynamisk PIVOT-forespørgsel?