Tidak perlu bergabung atau CTE rekursif. Solusi celah-dan-pulau standar adalah mengelompokkan berdasarkan (nilai dikurangi angka_baris), karena itu adalah invarian dalam urutan berurutan. Tanggal mulai dan berakhir hanyalah MIN() dan MAX() grup.
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)