重要な観察事項は、数列から別の数列を差し引いたものは定数であるということです。 row_number
を使用して別のシーケンスを生成できます .これにより、すべてのグループが識別されます:
select id, MIN(number) as low, MAX(number) as high
from (select t.*,
(number - ROW_NUMBER() over (partition by id order by number) ) as groupnum
from t
) t
group by id, groupnum
残りは単なる集計です。