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)
Hai bisogno di un naturale self-join. Le condizioni di adesione sono:
- Primo tavolo senza
Nonerecord (s1.country <> 'None') - Seconda tabella solo
Nonerecord (s2.country = 'None') - Data:considera solo la parte di anno e mese, ignora i giorni. Ciò può essere ottenuto normalizzando le date di entrambe le tabelle al primo del mese utilizzando
date_trunc(). Quindi, ad es.'2020-02-15'risulta in'2020-02-01'e'2020-02-29'risulta in'2020-02-01'anche, che funziona bene come confronto e condizione di unione.
In alternativa :
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'
Puoi usare SUM() funzione finestra sul gruppo di date_trunc() come descritto sopra. Quindi è necessario filtrare None record in seguito