यहाँ इस समस्या को हल करने का मेरा प्रयास है:
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
तारीखों के अनुसार ऑर्डर रिकॉर्ड करता है, और अंतरतम सबक्वेरी से परिणामसेट को सॉर्ट करने की आवश्यकता नहीं होती है।