LAG関数、LEAD関数
OracleにはLAG、LEAD関数というものがあります。
何ができるかというと、、、
ソートしたレコードの前or後のデータを参照できます。
なにに使うんだろうとちょっと考えてみたんですが、
前月差などを取るときに使えそうです。
こんな感じ
テーブル定義
CREATE TABLE SALES ( YEAR_MONTH NUMBER(6,0), VALUE NUMBER(10,0) )
でデータとして
YEAR_MONTH | VALUE |
---|---|
200904 | 100 |
200905 | 200 |
200906 | 100 |
があったとして、前月差を取得するために
SELECT YEAR_MONTH ,VALUE ,LAG(VALUE) OVER(ORDER BY YEAR_MONTH) PAST ,VALUE - LAG(VALUE) OVER(ORDER BY YEAR_MONTH) DIFF FROM SALES
こんなSQLを書きます。
するとこんな結果が帰ってきます
YEAR_MONTH | VALUE | PAST | DIFF |
---|---|---|---|
200904 | 100 | ||
200905 | 200 | 100 | 100 |
200906 | 100 | 200 | -100 |
PASTに前月のVALUEが、
DIFFに前月差が出ます。
これくらいしかLAG、LEADの使い道が思いつかない。。。。
ただ、なんか可能性を感じる関数ですのでもう少し考えてみます。