Oracle LEAD& LAG分析功能

时间:2017-09-07 22:36:17

标签: oracle lag

我有一个临时表用于测试并需要一些分析功能的方向。仍然试图找出我真正的解决方案..任何帮助引导我正确的方向将不胜感激。

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

Tyring找到前一个值并减去并添加列

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

1 个答案:

答案 0 :(得分:0)

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

你想:

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