Вычтите текущее значение строки предыдущим значением строки и получите сумму баланса к текущей строке - PullRequest
1 голос
/ 19 февраля 2020

Мне нужно получить balanceAmount, вычитая текущее значение строки из значения предыдущего ряда. Ожидаемый результат - как показано ниже.

expected result

Вот мой текущий запрос

select 
    pp.*,
    pp.topupAmount - sum(pp.chargeAmount) over (over by pp.ROW_NUM rows unbounded preceding) AS balanceAmount
from 
    (select 
         row_number() over (order by ppc.sortDate) ROW_NUM, ppc.*
     from 
         (select 0 as topupAmount, t1.chargeAmount, t1.sortDate  
          from t1
          union all
          select t2.topupAmount, 0 as chargeAmount, t2.sortDate   
          from t2) as ppc
     ) as pp    
order by 
    pp.ROW_NUM

Это то, что я получаю из запроса выше

current result

Как мне этого добиться?

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

Вам нужна оконная функция:

select t.*, sum(topupAmount - chargeAmount) over (order by sortDate) as balanceAmount
from table t;
1 голос
/ 19 февраля 2020

Вы можете использовать оконные функции:

select
    t.*,
    sum(topupAmount - chargeAmount) over(order by row_num) balanceAmount
from mytable t

На самом деле, глядя на ваш запрос, кажется, что row_num является сгенерированным столбцом, поэтому вы, вероятно, захотите:

select
    t.*,
    sum(topupAmount - chargeAmount) over(order by sortDate) balanceAmount
from mytable t
...