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
None
registros (s1.country <> 'None'
) - Segunda mesa solo
None
registros (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