我有一个包含两列的表:Cur_value 和 Difference
Cur_value Difference
(-3) 3
(-2) 4
(-1) 5
(1) 1
(2) -2
(3) 3
(4)
(5)
(6)
(7)
Run Code Online (Sandbox Code Playgroud)
现在我想从第 (1) 行到第 (7) 行计算 Cur_value 的值,以便
cur_value(t) = cur_value(t-3) + dif(t)。
这意味着我的结果是:
Value Difference
(-3) 3
(-2) 4
(-1) 5
(1) 3 + 1 1
(2) 4 - 2 -2
(3) 5 + 3 3
(4) 3 + 1 + 2 2
(5) 4 - 2 + 1 1
(6) 5 + 3 - 2 -2
(7) 3 + 1 + 2 - 1 -1
Run Code Online (Sandbox Code Playgroud)
. 我的问题是:如何通过单个 Oracle SQL 语句执行此操作?
请注意,数据库表没有任何内在顺序。假设您有一些 id 或其他列可用于定义行的顺序,您可以使用该lag函数来获取 t-3 记录:
SELECT cur_value,
difference,
LAG(cur_value, 3, 0) OVER (ORDER BY id) + difference AS new_cur_value
FROM my_table
Run Code Online (Sandbox Code Playgroud)