Мне нужно вычислить столбец (Transparencia
) как сумму значений Transparencia
и Dif
предыдущей строки.Первоначально только первая строка имеет значение в столбце Transparencia
:
Account ------ Year_ ---- Month_ ---- Transparencia ---- Dif
--------------------------------------------------------------
'4030003'------ 2018 ---- 5 ---- 100 ---- -2
'4040001'------ 2018 ---- 5 ---- null ---- -4
'4040002'------ 2018 ---- 5 ---- null ---- 3
...
Account(N-1)------ 2018 ---- 5 ---- x ---- 8
Account(N)------ 2018 ---- 5 ---- x + 8 ---- 11
Цель состоит в том, чтобы получить следующее:
Account ------ Year_ ---- Month_ ---- Transparencia ---- Dif
--------------------------------------------------------------
'4030003'------ 2018 ---- 5 ---- 100 ---- -2
'4040001'------ 2018 ---- 5 ---- 98 ---- -4
'4040002'------ 2018 ---- 5 ---- 94 ---- 3
...
Account(N-1)------ 2018 ---- 5 ---- x ---- 8
Account(N)------ 2018 ---- 5 ---- x + 8 ---- 11
Где:
- 98 = 100 + (-2) -> (
Transparencia
от предыдущего ряда плюс Dif
от предыдущего ряда) - 94 = 98 + (-4) -> (
Transparencia
от предыдущегострока плюс Dif
из предыдущего ряда) - x = 'Transparencia' из предыдущего ряда + 'Dif' из предыдущего ряда
- x + 8 = 'Transparencia' из предыдущего ряда +8 («Dif» от предыдущего ряда)
Решение, которое я пробовал, было:
select
tmp.Account, tmp.Year_, tmp.Month_,Dif,
case
when Transparencia is null
then (lag(Transparencia, 1, 0) over (order by Account) -
lag(Dif, 1, 0) over (order by Account))
else Transparencia
end Transparencia
from
(select
Account,
nryear as Year_, nrperiod as Month_,
Dif, Transparencia
from
repaca
where
nrperiod = 5) tmp
Однако это возвращает следующий результат:
Account ------ Year_ ---- Month_ ---- Transparencia ---- Dif
'4030003'------ 2018 ---- 5 ---- 100 ---- -2
'4040001'------ 2018 ---- 5 ---- 98 ---- -4
'4040002'------ 2018 ---- 5 ---- null ---- 3
Мне нужно добиться этого, используя SELECT
, а не хранимую процедуру или что-то подобное.Любая помощь будет оценена.
Заранее спасибо