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

連続する連続番号のグループの境界を見つける方法は?

    コメントで述べたように、これは古典的なギャップと島の問題です。

    Itzik Ben Ganによって普及した解決策は、ROW_NUMBER() OVER (ORDER BY number) - numberという事実を使用することです。 「島」内では一定のままであり、複数の島に表示することはできません。

    WITH T
         AS (SELECT ROW_NUMBER() OVER (ORDER BY number) - number AS Grp,
                    number
             FROM   mytable
             WHERE  status = 0)
    SELECT MIN(number) AS [From],
           MAX(number) AS [To]
    FROM   T
    GROUP  BY Grp
    ORDER  BY MIN(number) 
    

    注意:numberの場合 ROW_NUMBERを一意に置き換えることは保証されていません DENSE_RANKを使用 上記のコードで。




    1. Oracle PL / SQL:即時実行を使用した動的SQLの例

    2. MacOSX上のOracle11g

    3. 適切に永続化された計算列

    4. MariaDBに存在しない場合にのみテーブルを作成する