Oracle LEAD 和 LAG 分析函数

Oracle LEAD & LAG analytics functions

我有一个临时 table 用于测试,需要一些分析功能的指导。仍在努力找出我真正的解决方案.. 任何帮助我走向正确方向的帮助将不胜感激。

A1  B1
40  5
50  4
60  3
70  2
90  1   

试图找到以前的值并减去和添加列

SELECT A1, B1,
   (A1-B1) AS C1, 
  (A1-B1) + LEAD((A1-B1),1,0) OVER (ORDER BY ROWNUM) AS G1
  FROM TEST; 

输出不是我期望的

A1  B1  C1  
40  5   35  
50  4   46  
60  3   57  
70  2   68  
90  1   89  

从最后一行(第 5 行)开始,首先减去 A1 -B2 得到 C1..然后(C1+ 之前的 A1)- 之前的行 B1 即 ---> 89 + 70 - 2 = 157(将结果保存在之前的 C1 中行)

第 4 行:157+60 -3 = 214 重复直到第一行...

预期的最终输出应该是 ;--

A1  B1  C1  
40  5   295 
50  4   260 
60  3   214 
70  2   157 
90  1   89

LAGLEAD 只获取单行的值而不是多行的聚合,并且不会递归应用。

你想要:

SELECT A1,
       B1,
       SUM( A1 - B1 ) OVER ( ORDER BY ROWNUM
                             ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
                           ) AS C1
FROM   test;