Mysql
 sql >> Baza danych >  >> RDS >> Mysql

SQL:wybieranie wierszy, w których wartość kolumny zmieniła się z poprzedniego wiersza

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
      ) 

Ale możesz też spróbować tego (z indeksem na (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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zaktualizować MySQL 5.5 do 5.6 na Ubuntu 14.04

  2. Błąd krytyczny:wywołanie niezdefiniowanej funkcji mysql_connect()

  3. Laravel 5.2 – Użyj ciągu znaków jako niestandardowego klucza głównego dla elokwentnej tabeli, staje się 0

  4. Jak korzystać z kreatora bazy danych MySQL cPanel

  5. Pełne przywracanie klastra MySQL lub MariaDB Galera z kopii zapasowej