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)
Potrzebujesz naturalnego łączenia się. Warunki przyłączenia to:
- Pierwszy stół bez
None
rekordy (s1.country <> 'None'
) - Druga tabela tylko
None
rekordy (s2.country = 'None'
) - Data:uwzględnij tylko część roku i miesiąca, ignoruj dni. Można to osiągnąć normalizując daty obu tabel do pierwszego dnia miesiąca za pomocą
date_trunc()
. Tak więc m.in.'2020-02-15'
wyniki w'2020-02-01'
i'2020-02-29'
wyniki w'2020-02-01'
również, co działa dobrze jako porównanie i warunek dołączenia.
Alternatywnie :
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'
Możesz użyć SUM()
funkcja okna nad grupą date_trunc()
jak opisano powyżej. Następnie musisz filtrować None
zapisy później