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
LAG
和 LEAD
只获取单行的值而不是多行的聚合,并且不会递归应用。
你想要:
SELECT A1,
B1,
SUM( A1 - B1 ) OVER ( ORDER BY ROWNUM
ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
) AS C1
FROM test;
我有一个临时 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
LAG
和 LEAD
只获取单行的值而不是多行的聚合,并且不会递归应用。
你想要:
SELECT A1,
B1,
SUM( A1 - B1 ) OVER ( ORDER BY ROWNUM
ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
) AS C1
FROM test;