sql >> Databasteknik >  >> RDS >> Sqlserver

Upptäck på varandra följande datumintervall med SQL

Inga anslutningar eller rekursiva CTE:er behövs. Standardlösningen mellan luckor och ö är att gruppera efter (värde minus radnummer), eftersom det är invariant inom en på varandra följande sekvens. Start- och slutdatumen är bara MIN() och MAX() för gruppen.

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. SQL Server:Filterutgång för sp_who2

  2. Några idéer om resurspooling på låg nivå i PostgreSQL

  3. Operationen är inte giltig för tillståndet för transaktionsfelet och transaktionsomfånget

  4. MySQL välj en kolumn DISTINCT, med motsvarande andra kolumner