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)
Du behöver en naturlig självanslutning. Anslutningsvillkor är:
- Första tabellen utan
Noneposter (s1.country <> 'None') - Andra tabellen endast
Noneposter (s2.country = 'None') - Datum:Tänk bara på år och månad, ignorera dagar. Detta kan uppnås genom att normalisera datumen för båda tabellerna till den första i månaden genom att använda
date_trunc(). Så, t.ex.'2020-02-15'resulterar i'2020-02-01'och'2020-02-29'resulterar i'2020-02-01'också, vilket fungerar bra som jämförelse- och sammanfogningsvillkor.
Alternativt :
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'
Du kan använda SUM() fönsterfunktion över gruppen date_trunc() som beskrivits ovan. Sedan måste du filtrera None poster efteråt