Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Deteksi rentang tanggal berurutan menggunakan SQL

Tidak perlu bergabung atau CTE rekursif. Solusi celah-dan-pulau standar adalah mengelompokkan berdasarkan (nilai dikurangi angka_baris), karena itu adalah invarian dalam urutan berurutan. Tanggal mulai dan berakhir hanyalah MIN() dan MAX() grup.

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. SQL Server 2016:Buat Tampilan

  2. SCOPE_IDENTITY() untuk GUID?

  3. SQL Server ganti, hapus semua setelah karakter tertentu

  4. apakah ada keuntungan varchar(500) dibandingkan varchar(8000)?

  5. Permintaan untuk membuat daftar jumlah catatan di setiap tabel dalam database