क्वेरी के पीछे के विचार को देखें:
select distinct on (domain, new_date) *
from (
select new_date::date
from generate_series('2016-04-12', '2016-04-17', '1d'::interval) new_date
) s
left join a_table t on date <= new_date
order by domain, new_date, date desc;
new_date | domain | date | visitors | hits
------------+-----------------+------------+----------+-------
2016-04-12 | www.domain1.com | 2016-04-12 | 1231 | 23423
2016-04-13 | www.domain1.com | 2016-04-13 | 1374 | 26482
2016-04-14 | www.domain1.com | 2016-04-13 | 1374 | 26482
2016-04-15 | www.domain1.com | 2016-04-13 | 1374 | 26482
2016-04-16 | www.domain1.com | 2016-04-13 | 1374 | 26482
2016-04-17 | www.domain1.com | 2016-04-17 | 1262 | 21493
(6 rows)
आपको अपनी आवश्यकताओं के अनुसार प्रारंभ और समाप्ति तिथियां चुननी होंगी। क्वेरी काफी महंगी हो सकती है (आपने अरबों अंतराल के बारे में उल्लेख किया है) इसलिए इसे सावधानी के साथ लागू करें (एक छोटे डेटा सबसेट पर परीक्षण करें या चरणों द्वारा निष्पादित करें)।
generate_series()
. के अभाव में आप अपना खुद का जनरेटर बना सकते हैं। यहां एक दिलचस्प उदाहरण दिया गया है
. उद्धृत लेख के दृश्यों का उपयोग generate_series()
. के बजाय किया जा सकता है . उदाहरण के लिए, अगर आपको '2016-04-12' + 5 days
. की अवधि चाहिए :
select distinct on (domain, new_date) *
from (
select '2016-04-12'::date+ n new_date
from generator_16
where n < 6
) s
left join a_table t on date <= new_date
order by domain, new_date, date desc;
आपको पहले उदाहरण जैसा ही परिणाम मिलेगा।