Geen joins of recursieve CTE's nodig. De standaard gaps-and-island-oplossing is om te groeperen op (waarde minus rijnummer), aangezien dat invariant is binnen een opeenvolgende reeks. De start- en einddatums zijn slechts de MIN() en MAX() van de groep.
WITH t AS (
SELECT InfoDate d,ROW_NUMBER() OVER(ORDER BY InfoDate) i
FROM @d
GROUP BY InfoDate
)
SELECT MIN(d),MAX(d)
FROM t
GROUP BY DATEDIFF(day,i,d)