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)
Vous avez besoin d'une auto-jointure naturelle. Les conditions d'adhésion sont :
- Premier tableau sans
None
enregistrements (s1.country <> 'None'
) - Deuxième table seulement
None
enregistrements (s2.country = 'None'
) - Date :ne considérez que l'année et le mois, ignorez les jours. Ceci peut être réalisé en normalisant les dates des deux tables au premier du mois en utilisant
date_trunc()
. Ainsi, par ex.'2020-02-15'
résultats en'2020-02-01'
et'2020-02-29'
résultats en'2020-02-01'
également, ce qui fonctionne bien comme condition de comparaison et de jointure.
Alternativement :
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'
Vous pouvez utiliser le SUM()
fonction de fenêtre sur le groupe de date_trunc()
comme décrit ci-dessus. Ensuite, vous devez filtrer le None
enregistre ensuite