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

अतिव्यापी दिनांक सीमाओं से जुड़े मानों के योग की गणना करें

यहाँ इस समस्या को हल करने का मेरा प्रयास है:

select y,
     sum( hrs_per_week )
from tmp_ranges t
join(
  select daterange( x,
         lead(x) over (order by x) ) As y
  from (
    select lower( rng ) As x
    from tmp_ranges
    union 
    select upper( rng )
    from tmp_ranges
    order by x
  ) y
) y
on t.rng && y.y
group by y
order by y

डेमो:http://sqlfiddle.com/#!15/ef6cb/13

अंतरतम उपश्रेणी union का उपयोग करके सभी सीमा तिथियों को एक सेट में एकत्रित करती है , फिर उन्हें क्रमबद्ध करें।
फिर बाहरी सबक्वेरी lead का उपयोग करके आसन्न तिथियों से नई श्रेणियां बनाती है फ़ंक्शन।
अंत में, इन नई श्रेणियों को मुख्य क्वेरी, समेकित, और sum में स्रोत तालिका में शामिल कर लिया गया है। गणना की जाती है।

संपादित करें
order by अंतरतम क्वेरी में क्लॉज बेमानी है और इसे छोड़ दिया जा सकता है, क्योंकि lead(x) over तारीखों के अनुसार ऑर्डर रिकॉर्ड करता है, और अंतरतम सबक्वेरी से परिणामसेट को सॉर्ट करने की आवश्यकता नहीं होती है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कैसे तन () PostgreSQL में काम करता है

  2. Django में सबक्वायरी का उपयोग कैसे करें?

  3. Laravel 8 . में 3 या अधिक तालिकाओं में बाहरी जुड़ाव

  4. uWSGI, फ्लास्क, sqlalchemy, और postgres:SSL त्रुटि:डिक्रिप्शन विफल या खराब रिकॉर्ड मैक

  5. साझा लाइब्रेरी लोड करते समय त्रुटि:libpq.so.5:साझा ऑब्जेक्ट फ़ाइल नहीं खोल सकता:ऐसी कोई फ़ाइल या निर्देशिका नहीं