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)
Sie brauchen eine natürliche Selbstverbindung. Beitrittsbedingungen sind:
- Erster Tisch ohne
None
Aufzeichnungen (s1.country <> 'None'
) - Zweiter Tisch nur
None
Aufzeichnungen (s2.country = 'None'
) - Datum:Nur Jahres- und Monatsteil berücksichtigen, Tage ignorieren. Dies kann erreicht werden, indem die Daten beider Tabellen mit
date_trunc()
auf den Ersten des Monats normalisiert werden . Also z.B.'2020-02-15'
ergibt'2020-02-01'
und'2020-02-29'
ergibt'2020-02-01'
auch, was gut als Vergleichs- und Join-Bedingung funktioniert.
Alternativ :
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'
Sie können die SUM()
verwenden Fensterfunktion über die Gruppe date_trunc()
wie oben beschrieben. Dann müssen Sie None
filtern Aufzeichnungen danach