Comment calculer le total en cours d'exécution dans sql vers l'arrière

0

La question

entrez la description de l'image ici

select id,date,amount,SUM (Amount)  OVER (PARTITION BY ID ORDER BY DATE desc)  AS runningbalance from sales

J'ai essayé d'inverser le solde courant va de la plus récente à d'anciens enregistrements. Comment puis-je annuler ce reculer pour me donner de course de la balance dans l'autre sens?

sql tsql
2021-11-23 20:51:45
3

La meilleure réponse

2

Si votre ID est unique pour chaque ligne, puis retirez le PARTITION BY ID sinon, il ne somme cumulative. Pour inverser l'ordre de fonctionnement total, il vous suffit d'inverser le ORDER BY de la 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

Résultats:

ID Date Montant RunningBalanceForward RunningBalanceBackwards
1 2020-01-01 15 15 30
2 2020-01-02 10 25 15
3 2020-01-03 5 30 5
2021-11-23 21:16:46
0

en plus du total en cours d'exécution, utilisez la fonction row_number pour créer la colonne de tri et de partition par id order by date desc génération d'un rowid puis commande par le rowid

2021-11-23 21:11:41
0

Juste pour montrer un exemple de ce que la partition est utilisée pour.

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
Magasin | Date | Montant | RunningTotal | ReverseRunningTotal
:---- | :--------- | -----: | -----------: | ------------------:
Un| 2020-01-01 | 1 | 1 | 3
Un| 2020-01-03 | 1 | 2 | 2
Un| 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
2021-11-23 21:06:26

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................