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)
Necesitas una autounión natural. Las condiciones para unirse son:
- Primera mesa sin
Noneregistros (s1.country <> 'None') - Segunda mesa solo
Noneregistros (s2.country = 'None') - Fecha:solo considere la parte del año y el mes, ignore los días. Esto se puede lograr normalizando las fechas de ambas tablas al primer día del mes usando
date_trunc(). Entonces, p.'2020-02-15'da como resultado'2020-02-01'y'2020-02-29'da como resultado'2020-02-01'también, que funciona bien como condición de comparación y unión.
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'
Puedes usar el SUM() función de ventana sobre el grupo de date_trunc() como se describió anteriormente. Entonces necesitas filtrar el None registros después