Като начало:вашата currenet заявка не прави това, което искате. Изглежда, че всъщност се нуждаете от месечна сума на прозореца за fix_costs
. Така че бих започнал от:
select
sales_date,
country,
sum(sales_volume),
sum(sum(fix_costs)) over(partition by year(sales_date), month(sales_date))
/ day(last_day(sales_date))
as fix_cost_per_day
from sales
group by 1,2;
Това дава:
<предварителна>дата_на_продажба | държава | сума(обем_продажби) | fix_cost_per_day:-------- | :------ | ----------------:| ---------------:2020-01-03 | DE | 500 | 64.51612020-01-03 | FR | 350 | 64.51612020-01-03 | NL | 320 | 64.51612020-01-30 | Няма | 0 | 64.51612020-02-15 | DE | 700 | 172.41382020-02-15 | FR | 180 | 172.41382020-02-15 | NL | 420 | 172.41382020-02-29 | Няма | 0 | 172.41382020-03-27 | DE | 180 | 129.03232020-03-27 | FR | 970 | 129.03232020-03-27 | NL | 670 | 129.03232020-03-31 | Няма | 0 | 129,0323Оттам нататък можете да добавите логиката, която отчита „дневния дял от приходите по държава“. Както разбирам въпроса ви, това е:
select
sales_date,
country,
sum(sales_volume),
sum(sum(fix_costs)) over(partition by year(sales_date), month(sales_date))
/ day(last_day(sales_date))
* sum(sales_volume)
/ sum(sum(sales_volume)) over(partition by sales_date)
as fix_cost_per_day
from sales
group by 1,2;
Връща:
<предварителна>дата_на_продажба | държава | сума(обем_продажби) | fix_cost_per_day:-------- | :------ | ----------------:| ---------------:2020-01-03 | DE | 500 | 27.570995312020-01-03 | FR | 350 | 19.299696722020-01-03 | NL | 320 | 17.645437002020-01-30 | Няма | 0 | нула 2020-02-15 | DE | 700 | 92.838196292020-02-15 | FR | 180 | 23.872679052020-02-15 | NL | 420 | 55.702917772020-02-29 | Няма | 0 | нула 2020-03-27 | DE | 180 | 12.761432122020-03-27 | FR | 970 | 68.769939742020-03-27 | NL | 670 | 47.500886212020-03-31 | Няма | 0 | нула
Ако е необходимо, можете да премахнете записите за държава 'None'
като превърнете заявката в подзаявка и филтрирате във външна заявка.