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)
Potřebujete přirozené vlastní spojení. Podmínky připojení jsou:
- První tabulka bez
None
záznamy (s1.country <> 'None'
) - Pouze druhá tabulka
None
záznamy (s2.country = 'None'
) - Datum:Berte v úvahu pouze část roku a měsíce, dny ignorujte. Toho lze dosáhnout normalizací dat obou tabulek na první v měsíci pomocí
date_trunc()
. Takže např.'2020-02-15'
výsledkem je'2020-02-01'
a'2020-02-29'
výsledkem je'2020-02-01'
také, což funguje dobře jako podmínka porovnávání a spojení.
Alternativně :
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'
Můžete použít SUM()
okenní funkce nad skupinou date_trunc()
jak je popsáno výše. Pak musíte filtrovat None
záznamy poté