sql >> データベース >  >> RDS >> Mysql

SQLの連続行のGROUPBY

    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
    

    テスト用のテーブル作成スクリプト:

    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. MySQL'UPDATE ON DUPLICATE KEY'一意の列がありませんか?

    2. Rのグループによる列の連結

    3. SQLプラクティスのためにOracleExpressEditionをインストールする方法

    4. SQL Server(T-SQL)でのMONTH()の例