Sql'de çalışan toplamın geriye doğru hesaplanması

0

Soru

resim açıklamasını buraya girin

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

Bunu, en son kayıtlardan eski kayıtlara giden koşu dengesini tersine çevirmek için denedim. Beni nasıl çalışan denge başka bir yol vermek için geri gitmek için bu ters miyim?

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

En iyi cevabı

2

Eğer senin ID her satıra benzersizdir ve ardından PARTITION BY ID yoksa kümülatif olarak toplanmaz. Çalışan toplamın sırasını tersine çevirmek için ORDER BY of the 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

Sonuçlar:

KİMLİK Tarih Miktar RunningBalanceForward Denge geriye doğru koşuyor
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

çalışan toplamın yanı sıra, sıralama sütununu oluşturmak için bir row_number kullanın ve tarihe göre ıd sırasına göre bölümleyin desc bir rowıd ürettikten sonra rowıd sırasına göre sıralayın

2021-11-23 21:11:41
0

Sadece bölümün ne için kullanıldığına dair bir örnek göstermek için.

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
Mağaza / Tarih / Tutar / RunningTotal / ReverseRunningTotal
:---- | :--------- | -----: | -----------: | ------------------:
Bir| 2020-01-01 | 1 | 1 | 3
Bir| 2020-01-03 | 1 | 2 | 2
Bir| 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

Diğer dillerde

Bu sayfa diğer dillerde

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