繁体   English   中英

未来三个月销售额的滚动总和

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM