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

स्थगित दिनांक सीमाओं वाली पंक्तियाँ ढूँढें और उनकी अवधि संचित करें

यह एक अंतराल और द्वीपों की समस्या है। इस मामले में आप lag() . का उपयोग कर सकते हैं यह देखने के लिए कि एक द्वीप कहाँ से शुरू होता है और फिर एक संचयी योग।

अंतिम ऑपरेशन कुछ एकत्रीकरण है (विंडो फ़ंक्शंस का उपयोग करके):

SELECT p.*, 
      (Max(ends_on) OVER (PARTITION BY location_id, grp) - Min(starts_on) OVER (PARTITION BY location_id, grp) ) + 1 AS duration,
      Array_agg(p.id) OVER (PARTITION BY location_id) 
FROM (SELECT p.*, 
             Count(*) FILTER (WHERE prev_eo < starts_on - INTERVAL '1 day') OVER (PARTITION BY location_id ORDER BY starts_on) AS grp
      FROM (SELECT id, starts_on, ends_on, location_id, holiday_or_vacation_type_id, 
                   lag(ends_on) OVER (PARTITION BY location_id ORDER BY (starts_on)) AS prev_eo
            FROM periods 
           ) p
     ) p;



  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. PostgreSQL 9.4 में कैशिंग कॉन्ट्रिब के pg_prewarm और pg_hibernator का उपयोग करना।

  3. उत्पादन परिणामों में प्रश्नों को असामान्य रूप से उच्च डिस्क रीड I/O . में पोस्टग्रेज करता है

  4. PostgresPlus Advance Server 9.1 . के साथ PL/प्रॉक्सी का संकलन

  5. PostgreSQL मुझे वास्तव में क्या बता रहा है?