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

Hợp nhất các khoảng thời gian chồng chéo, làm thế nào?

Bạn cũng có thể thử truy vấn này (một lần nữa các giải pháp bên cạnh các giải pháp được đưa ra bởi PM 77-1 trong bình luận ở trên):

WITH RECURSIVE cte( id, date_start, date_end ) AS
(
  SELECT id, date_start, date_end
  FROM evento
  UNION 
  SELECT e.id,
         least( c.date_start, e.date_start ),
         greatest( c.date_end, e.date_end )
  FROM cte c
  JOIN evento e
  ON e.date_start between c.date_start and c.date_end
     OR 
     e.date_end between c.date_start and c.date_end
)
SELECT distinct date_start, date_end
FROM (
  SELECT id, 
         min( date_start) date_start, 
         max( date_end ) date_end
  FROM cte
  GROUP BY id
) xx
ORDER BY date_start;

Demo ---> http://www.sqlfiddle.com/#!12/ bdf7e / 9 Tuy nhiên,

đối với bảng lớn, hiệu suất của truy vấn này có thể chậm kinh khủng và một số phương pháp tiếp cận thủ tục có thể hoạt động tốt hơn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chiến lược lập chỉ mục cho các kết hợp khác nhau của mệnh đề WHERE bao gồm. mẫu văn bản

  2. Cant pg_restore trên Heroku:không thể đọc từ tệp đầu vào:cuối tệp

  3. Nhận danh sách ngày trong một phạm vi trong PostgreSQL

  4. PostgreSQL đến Data-Warehouse:Cách tiếp cận tốt nhất cho ETL gần thời gian thực / trích xuất dữ liệu

  5. 3 Hàm lấy Ngày, Tháng và Năm từ một Ngày trong PostgreSQL