PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

ओवरलैपिंग समय अंतराल को मर्ज करें, कैसे?

आप इस प्रश्न को भी आजमा सकते हैं (PM 77-1 . द्वारा दिए गए समाधानों के अलावा एक बार फिर समाधान) ऊपर टिप्पणी में) :

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;

डेमो ---> http://www.sqlfiddle.com/#!12/ bdf7e/9

हालांकि बड़ी तालिका के लिए इस क्वेरी का प्रदर्शन बहुत धीमा हो सकता है, और कुछ प्रक्रियात्मक दृष्टिकोण बेहतर प्रदर्शन कर सकते हैं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं क्रॉन के साथ अपने पोस्टग्रेएसक्यूएल डेटाबेस का बैकअप कैसे ले सकता हूं?

  2. वर्ष त्रुटि देता है

  3. SQL ORDER BY CASE with UNION ALL

  4. पोस्टग्रेज - जहां (सूची) में - कॉलम मौजूद नहीं है

  5. समवर्ती पहुंच पर तालिका में पंक्तियों के कुछ एनआर को कैसे चिह्नित करें?