sql >> Database >  >> RDS >> Sqlserver

Detecteer opeenvolgende datumbereiken met behulp van SQL

Geen joins of recursieve CTE's nodig. De standaard gaps-and-island-oplossing is om te groeperen op (waarde minus rijnummer), aangezien dat invariant is binnen een opeenvolgende reeks. De start- en einddatums zijn slechts de MIN() en MAX() van de groep.

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)


  1. Hoe voorloop- en volgspaties in MySQL te verwijderen

  2. mysql:waarom geeft het vergelijken van een 'string' met 0 waar?

  3. Moet de namen van werknemers ordenen volgens de kolom van hun stad

  4. De waarde van gegevens in de loop van de tijd