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の使い道が思いつかない。。。。
ただ、なんか可能性を感じる関数ですのでもう少し考えてみます。