Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Aufeinanderfolgende Datumsbereiche mit SQL erkennen

Keine Joins oder rekursiven CTEs erforderlich. Die Standardlösung für Lücken und Inseln besteht darin, zu gruppieren nach (Wert minus Zeilennummer), da dies innerhalb einer aufeinanderfolgenden Sequenz unveränderlich ist. Die Start- und Enddaten sind nur die MIN() und MAX() der Gruppe.

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)