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
NoneAufzeichnungen (s1.country <> 'None') - Zweiter Tisch nur
NoneAufzeichnungen (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