コメントで述べたように、これは古典的なギャップと島の問題です。
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
を使用 上記のコードで。