Как рассчитать общее количество операций в sql в обратном порядке

0

Вопрос

введите описание изображения здесь

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

Я попробовал это сделать, чтобы изменить текущий баланс, перейдя от самых последних записей к более старым. Как я могу повернуть это вспять, чтобы вернуться назад, чтобы обеспечить равновесие в другом направлении?

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

Лучший ответ

2

Если ваш ID является уникальным для каждой строки, затем удалите PARTITION BY ID иначе это не будет суммироваться кумулятивно. Чтобы изменить порядок текущего итога, просто измените порядок 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 Дата Сумма Запускаем баланс вперед Бегущий баланс назад
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

в дополнение к текущему итогу используйте row_number для создания столбца сортировки и разделения его по идентификатору в порядке по дате, чтобы создать идентификатор строки, а затем упорядочить по идентификатору строки

2021-11-23 21:11:41
0

Просто чтобы показать пример того, для чего используется раздел.

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
Магазин | Дата | Сумма | Итог выполнения | Обратный
итог :---- | :--------- | -----: | -----------: | ------------------:
А| 2020-01-01 | 1 | 1 | 3
А| 2020-01-03 | 1 | 2 | 2
А| 2020-01-05 | 1 | 3 | 1
В| 2020-01-02 | 10 | 10 | 30
В| 2020-01-04 | 10 | 20 | 20
В| 2020-01-06 | 10 | 30 | 10
2021-11-23 21:06:26

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

Популярное в этой категории

Популярные вопросы в этой категории