Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

SQL:chọn các hàng trong đó giá trị cột đã thay đổi so với hàng trước đó

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
      ) 

Nhưng bạn cũng có thể thử điều này (với chỉ mục trên (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. cách truy cập dòng lệnh cho xampp trên windows

  2. Sử dụng Cơ sở dữ liệu quan hệ MySQL trên Ubuntu 10.04 LTS (Lucid)

  3. Ví dụ về DAYOFYEAR () - MySQL

  4. Lỗi khi đổi tên một cột trong MySQL

  5. Tính toán sự khác biệt giữa hai lịch ngày trong MySQL