demos:db<>fiddle
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)
Você precisa de uma auto-junção natural. As condições de associação são:
- Primeira tabela sem
None
registros (s1.country <> 'None'
) - Segunda tabela somente
None
registros (s2.country = 'None'
) - Data:considere apenas a parte do ano e do mês, ignore os dias. Isso pode ser feito normalizando as datas de ambas as tabelas para o primeiro dia do mês usando
date_trunc()
. Assim, por exemplo'2020-02-15'
resulta em'2020-02-01'
e'2020-02-29'
resulta em'2020-02-01'
também, que funciona bem como condição de comparação e junção.
Alternativamente :
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'
Você pode usar o
SUM()
função de janela sobre o grupo de date_trunc()
como descrito acima. Então você precisa filtrar o None
registros depois