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

Gabungkan interval tanggal yang tumpang tindih

Saya sedang mencari solusi yang sama dan menemukan posting ini di Combine overlapping datetime untuk mengembalikan satu record rentang yang tumpang tindih.

Ada utas lain tentang Interval Tanggal Pengepakan.

Saya menguji ini dengan berbagai rentang tanggal, termasuk yang tercantum di sini, dan selalu berfungsi dengan benar.

SELECT 
       s1.StartDate,
       --t1.EndDate 
       MIN(t1.EndDate) AS EndDate
FROM @T s1 
INNER JOIN @T t1 ON s1.StartDate <= t1.EndDate
  AND NOT EXISTS(SELECT * FROM @T t2 
                 WHERE t1.EndDate >= t2.StartDate AND t1.EndDate < t2.EndDate) 
WHERE NOT EXISTS(SELECT * FROM @T s2 
                 WHERE s1.StartDate > s2.StartDate AND s1.StartDate <= s2.EndDate) 
GROUP BY s1.StartDate 
ORDER BY s1.StartDate 

Hasilnya adalah:

StartDate  | EndDate
2010-01-01 | 2010-06-13
2010-06-15 | 2010-06-25
2010-06-26 | 2010-08-16
2010-11-01 | 2010-12-31


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ubah nama bulan menjadi nomor bulan di SQL Server

  2. Anatomi kebuntuan SQL Server dan cara terbaik untuk menghindarinya

  3. Cara Memperbaiki "Pernyataan ALTER TABLE SWITCH gagal" Msg 4982 (SQL Server)

  4. Konversi 'datetime2' menjadi 'datetimeoffset' di SQL Server (Contoh T-SQL)

  5. Gunakan PARSENAME() untuk Mengembalikan Bagian dari Nama Objek di SQL Server