Postgresql Вычитание данных двух столбцов и передача этого значения в следующую строку - PullRequest
0 голосов
/ 18 марта 2020

у меня есть два столбца «начальный баланс» и «выпуск», «баланс» - это «начальный баланс» - «выпуск»

Таблица у меня

enter image description here

Мне нужно передать вычтенный «остаток», чтобы перейти к следующей строке и т. Д.

Ожидаемый результат

enter image description here

Есть ли решение?

1 Ответ

1 голос
/ 18 марта 2020

Вы решаете вариант проблемы "промежуточных итогов". Что странно в вашем вопросе, так это отсутствие критерия упорядочения строк - в ваших данных должен быть какой-то идентификатор или обычно временная метка для указания порядка транзакций в логах c.

Вы можете решить проблему с помощью оконных функций, например:

with t (order_criterion, opening,issue) as (values
  (1,1200,6),
  (2,1200,10),
  (3,1200,8),
  (4,1200,9)
)
select opening - coalesce(sum(issue) over (order by order_criterion rows between unbounded preceding and 1 preceding), 0) as opening
     , issue
     , opening - sum(issue) over (order by order_criterion) as closing
from t

или

with t (order_criterion, opening,issue) as (values
  (1,1200,6),
  (2,1200,10),
  (3,1200,8),
  (4,1200,9)
), i as (
  select order_criterion
       , opening
       , issue
       , opening - sum(issue) over (order by order_criterion) as closing
  from t
)
select coalesce(lag(closing) over (order by order_criterion), opening) as opening
     , issue
     , closing
from i

См. дБ: https://dbfiddle.uk/?rdbms=postgres_12&fiddle=53705b0d971deb9395df2091fba0857e

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...