Oracle SQL:使用上一行计算值

2024-01-09

我有一个包含两列的表:Cur_value 和 Difference

       Cur_value        Difference
(-3)       3    
(-2)       4    
(-1)       5    
(1)                        1
(2)                       -2
(3)                        3
(4)     
(5)     
(6)     
(7)     

现在我想计算从第 (1) 行到第 (7) 行的 Char Value 的值,以便

cur_value(t) = cur_value(t-3) + diff(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

。 我的问题是:如何通过单个 Oracle SQL 语句执行此操作?


请注意,数据库表没有任何内在顺序。假设您有一些 id 或其他列可用于定义行的顺序,您可以使用lag https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions070.htm获取 t-3 记录的函数:

SELECT cur_value, 
       difference, 
       LAG(cur_value, 3, 0) OVER (ORDER BY id) + difference AS new_cur_value
FROM   my_table
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Oracle SQL:使用上一行计算值 的相关文章

随机推荐