sql >> Base de Datos >  >> RDS >> Sqlserver

Detectar rangos de fechas consecutivas usando SQL

No se necesitan uniones ni CTE recursivos. La solución estándar de lagunas e islas es agrupar por (valor menos fila_número), ya que es invariable dentro de una secuencia consecutiva. Las fechas de inicio y finalización son solo el MIN() y MAX() del grupo.

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)