Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Détecter des plages de dates consécutives à l'aide de SQL

Aucune jointure ou CTE récursif n'est nécessaire. La solution standard d'espaces et d'îlots consiste à regrouper par (valeur moins row_number), car cela est invariant dans une séquence consécutive. Les dates de début et de fin ne sont que les MIN() et MAX() du groupe.

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)