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
그렇지 않을 것 합 cumulatively. 을 반대의 순서를 실행하는 총 단순히 반전 ORDER BY
의 SUM
:
DDL:
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);
DML:
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 |
외에도 총 실행,사용하는 그룹을 만들어 열 정렬하고 파티션에 의해 그것 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 :---- | :--------- | -----: | -----------: | ------------------: A| 2020-01-01 | 1 | 1 | 3 A| 2020-01-03 | 1 | 2 | 2 A| 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