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)
Du har brug for en naturlig selvtilslutning. Tilmeldingsbetingelser er:
- Første tabel uden
None
poster (s1.country <> 'None'
) - Den anden tabel kun
None
poster (s2.country = 'None'
) - Dato:Tag kun år og måned i betragtning, ignorer dage. Dette kan opnås ved at normalisere datoerne for begge tabeller til den første i måneden ved at bruge
date_trunc()
. Så f.eks.'2020-02-15'
resulterer i'2020-02-01'
og'2020-02-29'
resulterer i'2020-02-01'
også, hvilket fungerer godt som sammenligning og sammenføjningstilstand.
Alternativt :
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'
Du kan bruge SUM()
vinduesfunktion over gruppen date_trunc()
som beskrevet ovenfor. Så skal du filtrere None
optegnelser bagefter