在 SQL 服务器中计算五年前的总和
Calculate sum to five years back in SQL Server
我正在使用 select:
Select year, month, par1, par2, par3, value
from table1
制作这个 table:
现在,我想计算 sum contains 到五年前(即 60 个月)。
结果应该如下:
我该怎么做?
对于你的情况,因为表格是字符串形式的,所以我使用 CTE 为所需的计算制定日期列
; with
cte as
(
select *, date = convert(date, year + '-' + substring(month, 2, 2) + '-01', 121)
from table1
)
select *
from cte c
outer apply
(
select SumOfValue = sum(Value)
from cte x
where x.date >= dateadd(month, -60, c.date)
and x.date <= c.date
) t
如果您需要 sum() 按其他列分组,请将条件添加到 OUTER APPLY 查询
编辑 1:
select *
from cte c
outer apply
(
select SumOfValue = sum(x.Value)
from cte x
where x.date >= dateadd(month, -60, c.date)
and x.parameter1 = c.parameter1
and x.parameter2 = c.parameter2
and x.date <= c.date
) t
我正在使用 select:
Select year, month, par1, par2, par3, value
from table1
制作这个 table:
现在,我想计算 sum contains 到五年前(即 60 个月)。
结果应该如下:
我该怎么做?
对于你的情况,因为表格是字符串形式的,所以我使用 CTE 为所需的计算制定日期列
; with
cte as
(
select *, date = convert(date, year + '-' + substring(month, 2, 2) + '-01', 121)
from table1
)
select *
from cte c
outer apply
(
select SumOfValue = sum(Value)
from cte x
where x.date >= dateadd(month, -60, c.date)
and x.date <= c.date
) t
如果您需要 sum() 按其他列分组,请将条件添加到 OUTER APPLY 查询
编辑 1:
select *
from cte c
outer apply
(
select SumOfValue = sum(x.Value)
from cte x
where x.date >= dateadd(month, -60, c.date)
and x.parameter1 = c.parameter1
and x.parameter2 = c.parameter2
and x.date <= c.date
) t