select id,date,amount,SUM (Amount) OVER (PARTITION BY ID ORDER BY DATE desc) AS runningbalance from sales
Snažil jsem se to zvrátit běh bilance z posledních na starší záznamy. Jak to můžu zvrátit jít pozpátku mi běží rovnováhu jiným způsobem?
select id,date,amount,SUM (Amount) OVER (PARTITION BY ID ORDER BY DATE desc) AS runningbalance from sales
Snažil jsem se to zvrátit běh bilance z posledních na starší záznamy. Jak to můžu zvrátit jít pozpátku mi běží rovnováhu jiným způsobem?
Pokud váš ID
je jedinečný pro každý řádek pak odstranit PARTITION BY ID
jinde to nebude součet kumulativně. Obrátit pořadí běh celkem jednoduše zvrátit ORDER BY
z 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
Výsledky:
ID | Datum | Množství | RunningBalanceForward | RunningBalanceBackwards |
---|---|---|---|---|
1 | 2020-01-01 | 15 | 15 | 30 |
2 | 2020-01-02 | 10 | 25 | 15 |
3 | 2020-01-03 | 5 | 30 | 5 |
kromě běží celkem, použijte row_number vytvořit sloupec řazení a rozdělení podle id order by datum desc generování rowid pak pořadí podle rowid
Jen ukázat příklad, že oddíl se používá pro.
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
Store | Data | Množství | 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