select id,date,amount,SUM (Amount) OVER (PARTITION BY ID ORDER BY DATE desc) AS runningbalance from sales
我已经尝试过这种反向运行平衡会最近的旧记录。 我怎么可以扭转这一倒退到给我运行平衡的其他方式吗?
select id,date,amount,SUM (Amount) OVER (PARTITION BY ID ORDER BY DATE desc) AS runningbalance from sales
我已经尝试过这种反向运行平衡会最近的旧记录。 我怎么可以扭转这一倒退到给我运行平衡的其他方式吗?
如果你的 ID
是独一无二的每一行,然后删除 PARTITION BY ID
否则它不会累积总和. 扭转了正在运行的总数只是反的 ORDER BY
的 SUM
:
言:
declare @sales table (
ID int,
Date date,
Amount int);
insert into @sales
values
(1, '2020-01-01', 15),
(2, '2020-01-02', 10),
(3, '2020-01-03', 5);
仔:
select ID, Date, Amount,
sum(Amount) over (order by Date) as RunningBalanceForward,
sum(Amount) over (order by Date desc) as RunningBalanceBackwards
from @sales
order by ID
结果:
ID | 日期 | 量 | RunningBalanceForward | RunningBalanceBackwards |
---|---|---|---|---|
1 | 2020-01-01 | 15 | 15 | 30 |
2 | 2020-01-02 | 10 | 25 | 15 |
3 | 2020-01-03 | 5 | 30 | 5 |
除了总运行,使用一个row_number创建的排序列和分区通过id以便通过日期desc产生rowid然后便通过rowid
只是为了显示一个例子是该分区使用。
declare @Sales table ( ID int identity(1,1) primary key, [Date] date, Store varchar(30), Amount int ); insert into @Sales ([Date], Store, Amount) values ('2020-01-01','A',1), ('2020-01-03','A',1) , ('2020-01-05','A',1) , ('2020-01-02','B',10), ('2020-01-04','B',10) , ('2020-01-06','B',10) ; select Store, [Date], Amount, sum(Amount) over (partition by Store order by [Date] ASC) as RunningTotal, sum(Amount) over (partition by Store order by [Date] DESC) as ReverseRunningTotal from @Sales order by Store, [Date] GO
储存|日期|数量|RunningTotal|ReverseRunningTotal :---- | :--------- | -----: | -----------: | ------------------: 一个| 2020-01-01 | 1 | 1 | 3 一个| 2020-01-03 | 1 | 2 | 2 一个| 2020-01-05 | 1 | 3 | 1 B| 2020-01-02 | 10 | 10 | 30 B| 2020-01-04 | 10 | 20 | 20 B| 2020-01-06 | 10 | 30 | 10