Như đã đề cập trong các bình luận, đây là một vấn đề về khoảng cách và đảo cổ điển.
Một giải pháp được Itzik Ben Gan phổ biến là sử dụng thực tế là ROW_NUMBER() OVER (ORDER BY number) - number
không đổi trong một "đảo" và không thể xuất hiện ở nhiều đảo.
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)
NB:If number
không được đảm bảo là duy nhất thay thế ROW_NUMBER
với DENSE_RANK
trong đoạn mã trên.