Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wykryj kolejne zakresy dat za pomocą SQL

Nie są potrzebne żadne sprzężenia ani rekurencyjne CTE. Standardowym rozwiązaniem luki i wyspy jest grupowanie według (wartość minus numer_wiersza), ponieważ jest to niezmienne w kolejnej sekwencji. Daty rozpoczęcia i zakończenia to tylko MIN() i MAX() grupy.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak podzielić okno zapytania w SQL Server Management Studio (SSMS) — samouczek SQL Server / TSQL część 13

  2. Sprawdź, czy plik istnieje, czy nie na serwerze sql?

  3. Indeksy oparte na funkcjach w SQL Server

  4. Przykłady formatowania „datetimeoffset” w SQL Server przy użyciu standardowych ciągów formatujących (T-SQL)

  5. Instrukcja ALTER TABLE kolidowała z ograniczeniem FOREIGN KEY w SQL Server — SQL Sever / TSQL Tutorial, część 69