sql >> Databasteknik >  >> RDS >> Mysql

GROUP BY för kontinuerliga rader i 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

Skript för att skapa tabeller för testning:

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. SQLite Listview onclick filter db för att öppna resulterar i ny aktivitet

  2. Uppgradera MySQL till MariaDB 10 (Del 2 – Uppgradera MariaDB/MySQL 5.5 till version 10.0)

  3. Hur man konverterar decimal till hexadecimal med TO_CHAR() i Oracle

  4. Hur man fångar resultatet av ett DBCC-uttalande i en frestande