SELECT
s1.sales_date,
s1.country,
s1.sales_volume,
s2.fix_costs
FROM sales s1
JOIN sales s2 ON s1.country <> 'None' AND s2.country = 'None'
AND date_trunc('month', s1.sales_date) = date_trunc('month', s2.sales_date)
आपको एक प्राकृतिक स्व-जुड़ने की आवश्यकता है। शामिल होने की शर्तें हैं:
- पहली तालिका बिना
None
रिकॉर्ड (s1.country <> 'None'
) - दूसरी तालिका केवल
None
रिकॉर्ड (s2.country = 'None'
) - तारीख:केवल वर्ष और महीने के हिस्से पर विचार करें, दिनों को अनदेखा करें। यह
date_trunc()
का उपयोग करके दोनों तालिकाओं की तिथियों को महीने के पहले तक सामान्य करके प्राप्त किया जा सकता है . तो, उदा.'2020-02-15'
परिणाम'2020-02-01'
और'2020-02-29'
परिणाम'2020-02-01'
भी, जो तुलना और जॉइन कंडीशन के रूप में अच्छी तरह से काम करता है।
वैकल्पिक रूप से :
SELECT
*
FROM (
SELECT
sales_date,
country,
sales_volume,
SUM(fix_costs) OVER (PARTITION BY date_trunc('month', sales_date)) as fix_costs
FROM sales
) s
WHERE country <> 'None'
आप SUM()
. का उपयोग कर सकते हैं date_trunc()
. के समूह पर विंडो फ़ंक्शन जैसा ऊपर वर्णित है। फिर आपको None
. फ़िल्टर करने की आवश्यकता है रिकॉर्ड बाद में