मेरे पास रिकॉर्ड के साथ एक विशाल तालिका है जिसमें सभी की एक तिथि और एक मूल्य है:

id | date | price | etc...

और फिर मेरे पास यादृच्छिक तिथि सीमाओं की एक सूची है, कभी भी समान लंबाई के साथ नहीं:

ARRAY [
    daterange('2020-11-02','2020-11-05'), 
    daterange('2020-11-15','2020-11-20')
] 

मैं किसी एक श्रेणी में रिकॉर्ड्स को उनके अस्तित्व के आधार पर संक्षेप और समूहबद्ध करने के बारे में सबसे कुशलता से कैसे जाउंगा, जैसे:

range                   | sum
------------------------------------------
[2020-11-02,2020-11-05) | 125.55
[2020-11-15,2020-11-20) | 566.12
1
PeteFox 22 नवम्बर 2020, 03:16

1 उत्तर

सबसे बढ़िया उत्तर

आप सरणी, left join को उन तिथियों पर तालिका को अननेस्ट कर सकते हैं जो श्रेणियों में समाहित हैं, और अंत में कुल:

select x.rg, sum(t.price) sum_price
from unnest($1) x(rg)
left join mytable t on x.rg @> t.date 
group by x.rg

$1, daterange की सरणी का प्रतिनिधित्व करता है जिसे आप क्वेरी में पास करना चाहते हैं।

1
GMB 22 नवम्बर 2020, 00:19