我有一張桌子,圖中顯示了三列。
Ord_dt - 下訂單的日期。
first_order- 第一次下訂單的日期。(根據過去 52 周計算)
cnt_orders - 在訂單日期下達的訂單總數。
ORD_DT first_order cnt_orders
6/19/2020 6/19/2020 2
6/22/2020 6/19/2020 1
10/8/2020 6/19/2020 2
11/20/2020 6/19/2020 1
12/1/2020 6/19/2020 1
2/4/2021 6/19/2020 1
2/12/2021 6/19/2020 1
3/7/2021 6/19/2020 1
3/30/2021 6/19/2020 1
4/7/2021 6/19/2020 1
4/30/2021 6/19/2020 1
5/11/2021 6/19/2020 1
5/31/2021 6/19/2020 2
7/28/2021 10/8/2020 2
基于 First_order Date 的最終輸出應該是這樣的。Running_Sum 列是基于 first_order 的 cnt_orders 的運行總和。在下面的示例中,第 3 行 Ord_dt = first_order 在第 14 行,因此它應該對從第 3 行到第 14 行的第 14 行的所有訂單求和。
ORD_DT first_order cnt_orders Running_sum
6/19/2020 6/19/2020 2 2
6/22/2020 6/19/2020 1 3
10/8/2020 6/19/2020 2 5
11/20/2020 6/19/2020 1 6
12/1/2020 6/19/2020 1 7
2/4/2021 6/19/2020 1 8
2/12/2021 6/19/2020 1 9
3/7/2021 6/19/2020 1 10
3/30/2021 6/19/2020 1 11
4/7/2021 6/19/2020 1 12
4/30/2021 6/19/2020 1 13
5/11/2021 6/19/2020 1 14
5/31/2021 6/19/2020 2 16
7/28/2021 10/8/2020 2 15
我嘗試過使用 SUM 和 Partition,但由于 first_order 已更改,它沒有給我正確的最后一行資料。它應該給我 15 而不是 18。
如何在 SQL Server 中實作這一點?
需要運行總和的示例表
uj5u.com熱心網友回復:
create table t
(ORD_DT date, first_order date, cnt_orders int);
go
insert into t values
('6/19/2020' , '6/19/2020' , 2),
('6/22/2020' , '6/19/2020' , 1),
('10/8/2020' , '6/19/2020' , 2),
('11/20/2020', '6/19/2020' , 1),
('12/1/2020' , '6/19/2020' , 1),
('2/4/2021' , '6/19/2020' , 1),
('2/12/2021' , '6/19/2020' , 1),
('3/7/2021' , '6/19/2020' , 1),
('3/30/2021' , '6/19/2020' , 1),
('4/7/2021' , '6/19/2020' , 1),
('4/30/2021' , '6/19/2020' , 1),
('5/11/2021' , '6/19/2020' , 1),
('5/31/2021' , '6/19/2020' , 2),
('7/28/2021' , '10/8/2020' , 2);
go
select * ,
(select sum(t1.cnt_orders)
from t t1
where t1.ord_dt >= t.first_order and
t1.ord_dt <= t.ORD_DT
) cumsum
from t
order by ord_dt;
ORD_DT first_order cnt_orders cumsum
---------- ----------- ----------- -----------
2020-06-19 2020-06-19 2 2
2020-06-22 2020-06-19 1 3
2020-10-08 2020-06-19 2 5
2020-11-20 2020-06-19 1 6
2020-12-01 2020-06-19 1 7
2021-02-04 2020-06-19 1 8
2021-02-12 2020-06-19 1 9
2021-03-07 2020-06-19 1 10
2021-03-30 2020-06-19 1 11
2021-04-07 2020-06-19 1 12
2021-04-30 2020-06-19 1 13
2021-05-11 2020-06-19 1 14
2021-05-31 2020-06-19 2 16
2021-07-28 2020-10-08 2 15
(14 row(s) affected)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/439858.html
下一篇:連接多個表ORACLE
