[英]Next Three month Rolling sum of sales
我认为您需要编写如下查询。
;WITH CTE
AS (
SELECT DATEFROMPARTS(CAST(SUBSTRING(T1.YearMonth, 1, 4) AS INT),
CAST(SUBSTRING(T1.YearMonth, 5, 2) AS INT), 1) YearMonthDt
,Sales
,YearMonth
FROM @table T1
)
SELECT T1.YearMonth
,T2.YearMonth
,T2.sales
FROM CTE T1
INNER JOIN CTE T2 ON DATEDIFF(mm, T2.YearMonthDt, T1.YearMonthDt) <= 3
ORDER BY T1.YearMonth
您的标题描述了滚动总和。 您的样本数据只是取了一个最大值。 以下两者兼而有之。
嗯。 . . 我认为row_number()
在这里可以提供很大帮助:
with t as (
select t.*, row_number() over (order by yearmonth) as seqnum
from yourtable t
)
select t1.yearmonth, max(t2.yearmonth) as last_mont_max, sum(t2.sales) as rolling_sum,
max(t2.sales) as value
from t t1 cross join
(values (1), (2), (3)) n(n) join
t t2
on t2.seqnum >= t1.seqnum and
t2.seqnum <= t1.seqnum + n.n
group by t1.yearmonth, n.n;
这是一个 db<>fiddle
如果您只想要每行的滚动总和(不是您的结果显示的),那么它要简单得多:
select t.*,
sum(sales) over (order by yearmonth
rows between current row and 2 following)
) as value
from yourtable t;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.