SQL Serverで前後レコードの値を参照する
SQLServerで前後レコードの値を参照する方法を紹介します。
コーディング例
BEGIN
-- テンポラリテーブル作成
CREATE TABLE #TMP(
[Value] INT
)
-- 初期データ追加
INSERT INTO #TMP
VALUES
(1)
,(2)
,(3)
;
-- 前後のデータを参照
SELECT
LAG([Value], 2, 0) OVER (ORDER BY [Value]) AS [2つ前データ]
,LAG([Value], 1, 0) OVER (ORDER BY [Value]) AS [前データ]
,[Value] AS [*カレント*]
,LEAD([Value], 1, 9) OVER (ORDER BY [Value]) AS [後データ]
,LEAD([Value], 2, 9) OVER (ORDER BY [Value]) AS [2つ後データ]
FROM
#TMP
;
-- テンポラリテーブル削除
DROP TABLE #TMP;
END
実行結果
| 2つ前データ | 前データ | *カレント* | 後データ | 2つ後データ |
|---|---|---|---|---|
| 0 | 0 | 1 | 2 | 3 |
| 0 | 1 | 2 | 3 | 9 |
| 1 | 2 | 3 | 9 | 9 |
18~19行目ではLAG関数を使用し、前のデータを参照しています。
LAG関数の第1引数にはカラム名、第2引数には現在の行から前に戻る行数、第3引数には前に戻る行が存在しない場合のデフォルト値を指定します。並び順についてはOVER句のORDER BYで指定します。
21~22行目ではLEAD関数を使用し、後のデータを参照しています。
LEAD関数の第1引数にはカラム名、第2引数には現在の行から後ろに続く行数、第3引数には後ろに続く行が存在しない場合のデフォルト値を指定します。並び順についてはOVER句のORDER BYで指定します。
以上、「SQL Serverで前後レコードの値を参照する」の紹介でした。






