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

समय समग्र कार्य में अतिव्यापी अवधियों को बाहर करें

इसके बारे में क्या:

WITH
   /* get all time points where something changes */
   points AS (
       SELECT "startDate" AS p
       FROM temp_period
       UNION SELECT "endDate"
       FROM temp_period
   ),
   /*
    * Get all date ranges between these time points.
    * The first time range will start with NULL,
    * but that will be excluded in the next CTE anyway.
    */
   inter AS (
      SELECT daterange(
                lag(p) OVER (ORDER BY p),
                p
             ) i
      FROM points
   ),
   /*
    * Get all date ranges that are contained
    * in at least one of the intervals.
    */
   overlap AS (
      SELECT DISTINCT i
      FROM inter
         CROSS JOIN temp_period
      WHERE i <@ daterange("startDate", "endDate")
   )
/* sum the lengths of the date ranges */
SELECT sum(age(upper(i), lower(i)))
FROM overlap;

आपके डेटा के लिए यह वापस आ जाएगा:

┌──────────┐
│ interval │
├──────────┤
│ 576 days │
└──────────┘
(1 row)


  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. एकाधिक चयन इनपुट मान अप्रत्याशित dplyr (पोस्टग्रेज) व्यवहार बनाते हैं

  3. मैं एक ActiveRecord मॉडल विशेषता को json से jsonb में कैसे माइग्रेट करूं?

  4. स्कीमा में पोस्टग्रेस्क्ल अनुक्रम नेक्स्टवल

  5. PostgreSQL में नया उपयोगकर्ता सभी डेटाबेस से क्यों जुड़ सकता है?