Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Rileva intervalli di date consecutivi utilizzando SQL

Non sono necessari join o CTE ricorsivi. La soluzione standard per lacune e isole consiste nel raggruppare per (valore meno numero_riga), poiché è invariante all'interno di una sequenza consecutiva. Le date di inizio e fine sono solo MIN() e MAX() del gruppo.

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)