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

SQL:グループ化を使用して最新の連続的に異なる値を選択する

    うーん。 . . 1 つの方法は、最後の値を取得することです。次に、その値と集計を持つ最後の行をすべて選択します:

    select min(rownum), colA, colB
    from (select t.*,
                 first_value(colA) over (partition by colB order by rownum desc) as last_colA
          from t
         ) t
    where rownum > all (select t2.rownum
                        from t t2
                        where t2.colB = t.colB and t2.colA <> t.last_colA
                       )
    group by colA, colB;
      

    または、集計なし:

    select t.*
    from (select t.*,
                 first_value(colA) over (partition by colB order by rownum desc) as last_colA,
                 lag(colA) over (partition by colB order by rownum) as prev_clA
          from t
         ) t
    where rownum > all (select t2.rownum
                        from t t2
                        where t2.colB = t.colB and t2.colA <> t.last_colA
                       ) and
          (prev_colA is null or prev_colA <> colA);
      

    しかし、SQL Server 2008 では、これをギャップ アンド アイランドの問題として扱いましょう:

    select t.*
    from (select t.*,
                 min(rownum) over (partition by colB, colA, (seqnum_b - seqnum_ab) ) as min_rownum_group,
                 max(rownum) over (partition by colB, colA, (seqnum_b - seqnum_ab) ) as max_rownum_group
          from (select t.*,
                       row_number() over (partition by colB order by rownum) as seqnum_b,
                       row_number() over (partition by colB, colA order by rownum) as seqnum_ab,
                       max(rownum) over (partition by colB order by rownum) as max_rownum
                from t
               ) t
         ) t
    where rownum = min_rownum_group and  -- first row in the group defined by adjacent colA, colB
          max_rownum_group = max_rownum  -- last group for each colB;
      

    これは、行番号の違いを使用して各グループを識別します。データ内のグループおよび全体の最大 rownum を計算します。これらは最後のグループでも同じです。




    1. ElasticsearchでPIIを見つけてマスクする方法

    2. MySQLデータ型をJavaDate()に対応させる

    3. SQLServerのテキスト型とvarcharデータ型

    4. SQLと一意のn列の組み合わせ