Zoals vermeld in de opmerkingen is dit een klassiek hiaten- en eilandenprobleem.
Een door Itzik Ben Gan gepopulariseerde oplossing is om gebruik te maken van het feit dat ROW_NUMBER() OVER (ORDER BY number) - number
blijft constant binnen een "eiland" en kan niet op meerdere eilanden voorkomen.
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:Indien number
is niet gegarandeerd uniek vervang ROW_NUMBER
met DENSE_RANK
in de bovenstaande code.