SQL中基于动态日期范围的窗口功能

时间:2018-06-27 14:06:41

标签: running-total windowing

我正在尝试按客户划分连续12个月的销售总额。以下是我的示例数据:

CREATE TABLE #Test
(
[CustomerID] NVARCHAR(2),
[SalesDate] DATE,
[SalesQty] INT
)

INSERT INTO #Test VALUES 
('A1','9/17/2016',21),
('A1','3/9/2018',14),
('B1','4/2/2017',11),
('B1','6/13/2017',48),
('C1','8/6/2017',28),
('C1','10/29/2017',41),
('C1','11/17/2017',48),
('C1','6/1/2018',31),
('D1','7/19/2016',32),
('D1','2/14/2017',43),
('D1','5/24/2018',38),
('E1','12/20/2016',17),
('E1','1/4/2017',42),
('E1','8/29/2017',31),
('E1','10/12/2017',29),
('E1','10/24/2017',12),
('E1','11/30/2017',40),
('E1','1/9/2018',41),
('E1','1/29/2018',25),
('E1','3/22/2018',15),
('E1','4/24/2018',22),
('E1','4/25/2018',37),
('E1','5/18/2018',40),
('E1','6/12/2018',32)   

我想在此数据中添加一列,以向我显示每个客户12个月的累计销售量。

这是我在Excel中使用sumifs的预期输出:

CustomerID  SalesDate   SalesQty    Rolling 12 Months Cumulative Sales
A1  9/17/2016   21  21
A1  3/9/2018    14  14
B1  4/2/2017    11  11
B1  6/13/2017   48  59
C1  8/6/2017    28  28
C1  10/29/2017  41  69
C1  11/17/2017  48  117
C1  6/1/2018    31  148
D1  7/19/2016   32  32
D1  2/14/2017   43  75
D1  5/24/2018   38  38
E1  12/20/2016  17  17
E1  1/4/2017    42  59
E1  8/29/2017   31  90
E1  10/12/2017  29  119
E1  10/24/2017  12  131
E1  11/30/2017  40  171
E1  1/9/2018    41  153
E1  1/29/2018   25  178
E1  3/22/2018   15  193
E1  4/24/2018   22  215
E1  4/25/2018   37  252
E1  5/18/2018   40  292
E1  6/12/2018   32  324

客户A1有2个销售交易,但彼此之间的间隔时间超过12个月,因此滚动12个月的累积销售量 每个交易的日期与每个日期的SalesQty列完全相同。客户C1在12个月的滚动期内全部有4个交易,因此“滚动12个月的累积销售”列继续添加SalesQty,等等。请注意,客户D1的第三笔交易的“滚动12个月的累积销售”如何从75下降到38是2017年5月24日至2018年5月24日之间的12个月内唯一的销售。

我对如何在SQL中执行此操作感到困惑。我试图使用窗口函数,但无法弄清楚如何根据当前行的销售日期将分区限制为CustomerID和前12个月。

0 个答案:

没有答案