2017-09-07 3 views
0

私は、いくつかの分析機能を使ってテストし、方向性が必要な一時表を持っています。まだ私の本当の解決策を理解しようとしています..そして、正しい方向に私を導く助けがありがたくなるでしょう。Oracle LEAD&LAG解析機能

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

出力私が最後の行(5行目)から

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

、第一減算期待するものではないカラムを

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

を前の値を検索し、減算及び追加するTyring 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 
+0

あなたはROWNUM'順 'から何を期待していますか?実際に何が起こるのだろうか。 'ROWNUM'による注文は純粋にランダムです。 (または「純粋にランダム」ではないが、行内のデータとは何の関係もないオーダリングである) – mathguy

答えて

0

LAGLEADのみ取得単一の行の値ではなく、複数の行の集約と再帰的には適用されません。

あなたが欲しい:

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

OPに「ORDER BY ROWNUM」の意味を質問し、それをより良いものにコピーする試み... – mathguy

関連する問題