Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Detectar intervalos de datas consecutivos usando SQL


Não são necessárias junções ou CTEs recursivas. A solução padrão de lacunas e ilhas é agrupar por (valor menos número_linha), pois isso é invariável em uma sequência consecutiva. As datas de início e término são apenas MIN() e MAX() do 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)