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

MySQLで連続したgroupbyを実行するにはどうすればよいですか?

    使用:

       SELECT MIN(t.id) 'mi', 
              t.val, 
              COUNT(*)
         FROM (SELECT x.id, 
                     x.val, 
                     CASE 
                       WHEN xt.val IS NULL OR xt.val != x.val THEN 
                         @rownum := @rownum+1 
                       ELSE 
                         @rownum 
                     END AS grp
                FROM TABLE x
                JOIN (SELECT @rownum := 0) r
           LEFT JOIN (SELECT t.id +1 'id',
                             t.val
                        FROM TABLE t) xt ON xt.id = x.id) t
     GROUP BY t.val, t.grp
     ORDER BY mi
    

    ここで重要なのは、グループ化を可能にする人工的な価値を生み出すことでした。

    以前、Guffaの回答を修正しました:

       SELECT t.id, t.val
         FROM TABLE t
    LEFT JOIN TABLE t2 on t2.id + 1 = t.id
        WHERE t2.val IS NULL 
           OR t.val <> t2.val
    


    1. Rails:データベースで空の文字列を強制的にNULLにする

    2. ハイブリッドクラウドデータベーストラフィックを暗号化する方法

    3. AmazonAWSにPostgreSQLバックアップを保存するためのヒント

    4. ユーザーはデータベースにアクセスできません