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

共通の属性を持つ連続したレコードのグループを選択しますか?

    これを試していただけませんか?ここでテストできます http://www.sqlfiddle.com/#!2/57967 / 12 。

    Select grp_new, group_concat(ord)
    From (
       Select ord, if(grp = @prev, @seq, @seq := @seq + 1) as seq,
        if(grp = @prev, grp, @prev := grp) as grp_new
      From tab, (SELECT @seq := 0, @prev := '') AS init
      Order by ord
    ) x
    Group by grp_new, seq;
    

    重要なアイデアは、同じseqを生成することです 次のように同じ連続グループの場合。

    Select
       ord, if(grp = @prev, @seq, @seq := @seq + 1) as seq,
        if(grp = @prev, grp, @prev := grp) as grp_new
    From tab, (SELECT @seq := 0, @prev := '') AS init
    Order by ord
    

    最後に、GROUP BY grp, seqをグループ化します。 grpが同じであっても、連続する各グループを区別できます。 。

    編集:例の結果を正確に取得するには:

    Select grp_new, group_concat(ord order by ord)
    From (
      Select ord, if(grp = @prev, @seq, @seq := @seq + 1) as seq,
        if(grp = @prev, grp, @prev := grp) as grp_new
      From tab, (SELECT @seq := 0, @prev := '') AS init
      Order by ord
    ) x
    Group by seq
    


    1. MariaDBの時刻または日時の値にAM/PMを追加する方法

    2. OracleでのKEEPの有無によるPARTITIONBY

    3. Python:mysqlデータベースの変更に関する通知を取得する方法は?

    4. SQLクエリの履歴を調べる