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

GROUP BY cho các hàng liên tục trong SQL

SELECT  MIN(id) AS id, MIN(ts) AS ts, MIN(state) AS state, COUNT(*) cnt
FROM    (
        SELECT  @r := @r + (@state != state) AS gn,
                @state := state AS sn,
                s.*
        FROM    (
                SELECT  @r := 0,
                        @state := 0
                ) vars,
                t_state s
        ORDER BY
                ts
        ) q
GROUP BY
        gn

Tập lệnh tạo bảng để thử nghiệm:

CREATE TABLE t_state (id INT NOT NULL PRIMARY KEY, state INT NOT NULL, ts DATETIME NOT NULL);

INSERT
INTO  t_state
VALUES
(12,   1,      '2009-07-16 10:00'),
(45,   2,      '2009-07-16 13:00'),
(67,   2,      '2009-07-16 14:40'),
(77,   1,      '2009-07-16 15:00'),
(89,   1,      '2009-07-16 15:30'),
(99,   1,      '2009-07-16 16:00');


  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 hiển thị các quy trình MySQL

  2. Kiên trì và không liên tục - Tôi nên sử dụng cái nào?

  3. 'Kết nối' một ứng dụng đường ray với MySQL DB đã tồn tại?

  4. Flask_SQLAlchemy, MySQL, lưu trữ các ký tự Thụy Điển å, ä, ö?

  5. Giữ dữ liệu cộng với dữ liệu chỉ mục trong bộ nhớ - InnoDB so với MyISAM