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
записва след това