Reputation: 15710
I need to get the balanceAmount
by subtracting the current row value from the previous row's value. Expected result is as below.
Here is my current query
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
This is what I am getting from above query
How could I achieve this?
Upvotes: 1
Views: 1796
Reputation: 50163
You need window function :
select t.*, sum(topupAmount - chargeAmount) over (order by sortDate) as balanceAmount
from table t;
Upvotes: 1
Reputation: 222512
You can use window functions:
select
t.*,
sum(topupAmount - chargeAmount) over(order by row_num) balanceAmount
from mytable t
Actually by looking at your query it seems like row_num
is a generated column, so you likely want:
select
t.*,
sum(topupAmount - chargeAmount) over(order by sortDate) balanceAmount
from mytable t
Upvotes: 1