[英]sql sum by month and year
我已经尝试通过编写相关查询但未能产生输出....我现在只尝试使用连接
SELECT sum(t1.acc)
,t1.mon
,t1.yr
FROM gl t1
WHERE mon IN (
SELECT mon
FROM gl t2
WHERE t2.mon <= t1.mon
AND t2.yr = t1.yr
)
GROUP BY t1.mon
,t1.yr
您应该将数据与自身连接并应用总和条件。
drop table if exists #input_data
select * into #input_data
from
(
select 1 as acc, 5 as mon, 2020 as yr union all
select 2 as acc, 6 as mon, 2020 as yr union all
select 3 as acc, 4 as mon, 2021 as yr union all
select 4 as acc, 3 as mon, 2021 as yr
) d
select
sum(e0.acc) as acc_sum,
d.mon,
d.yr
from
#input_data d
join #input_data e0
on e0.yr = d.yr and e0.mon <= d.mon
group by
d.yr, d.mon
order by
d.yr, d.mon
如果您在同一个mon/yr
有多个记录,那么您必须添加额外的分组。
drop table if exists #input_data
select * into #input_data
from
(
select 1 as acc, 5 as mon, 2020 as yr union all
select 2 as acc, 6 as mon, 2020 as yr union all
select 3 as acc, 4 as mon, 2021 as yr union all
select 4 as acc, 3 as mon, 2021 as yr union all
select 0 as acc, 5 as mon, 2020 as yr
) d
;with cte_source as
(
select
sum(acc) as acc,
mon,
yr
from #input_data d
group by d.yr, d.mon
)
select
sum(e0.acc) as acc_sum,
d.mon,
d.yr
from
cte_source d
join cte_source e0
on e0.yr = d.yr and e0.mon <= d.mon
group by
d.yr, d.mon
order by
d.yr, d.mon
您似乎想要一年内的累计金额:
select year, mon, sum(acc) over (partition by year order by mon)
from t
order by year, acc;
以原始顺序恢复数据有点棘手,但只需要一个明确的order by
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.