Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Hợp nhất các khoảng ngày trùng lặp

Tôi đang tìm kiếm giải pháp tương tự và bắt gặp bài đăng này về Kết hợp ngày giờ trùng lặp để trả về bản ghi phạm vi trùng lặp.

Có một chủ đề khác về Khoảng thời gian ngày đóng gói.

Tôi đã thử nghiệm điều này với nhiều phạm vi ngày khác nhau, bao gồm cả những phạm vi được liệt kê ở đây và nó hoạt động chính xác mọi lúc.

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 

Kết quả là:

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. Len () so với datalength () trong SQL Server 2005

  2. Truy vấn máy chủ sql được liên kết

  3. Các cách có thể để khắc phục sự cố lỗi siêu dữ liệu máy chủ SQL

  4. Cách tìm định dạng ngày được sử dụng cho một ngôn ngữ cụ thể trong SQL Server (T-SQL)

  5. Phục hồi cơ sở dữ liệu được tăng tốc trong SQL Server 2019