Я даже не совсем уверен, как назвать то, что я пытаюсь сделать. Мне нужен столбец, который накапливает сумму собственных вычислений в предыдущих строках. Вот упрощенный пример вывода, который мне нужен (d - столбец, с которым мне нужна помощь):
a b c d e
1 36 6 36 6
2 0 5 30 6
3 0 4 24 6
4 22 10 40 4
5 0 9 36 4
6 0 8 32 4
a - столбец автономного номера
b - введенный пользователем столбец
c - это столбец, который обычно ведет обратный отсчет, но иногда к нему добавляются другие значения
d равно: предыдущий ряд d + b - предыдущий ряд e
e равно d / c
Может помочь, если я объясню, зачем мне это нужно. Я работаю над моделированием воздействия шоковых ставок на банковское учреждение (обычно называемое стресс-тестированием). b - это столбец, отражающий некоторое влияние шока на процентную ставку (например, процентное изменение количества выданных кредитов). c - это столбец, который представляет количество месяцев до того, как ожидается, что рынок вернется в нормальное состояние без каких-либо дальнейших шоковых курсов. d представляет влияние на ссуды за этот период времени, а e - скорость, с которой d возвращается к нулю.
Вот что я пробовал до сих пор и почему это не работает:
SET var := 0;
SELECT var := var + b - var/c AS d
Это было бы моим предпочтительным решением, но я создаю представление, и представлениям не разрешено ссылаться на созданные пользователем переменные. Это должно быть представление, потому что мне нужно ссылаться на него в других запросах и представлениях.
SELECT (lag(d,1,0) OVER (ORDER BY a)) + b - (lag(e,1,0) OVER (ORDER BY a)) AS d
Это не работает, потому что d еще не определено. Я просто получаю сообщение об ошибке, что d не столбец.
SELECT
((SELECT sum(temp.b)
FROM table as temp
WHERE temp.a <= a)
/(SELECT sum(temp2.c)
FROM table as temp2
WHERE temp2.a = a))
Это не работает, потому что мне нужно разделить уменьшенное значение d, а не просто сумму b.