SQL Serverで前後レコードの値を参照する

データベースSQLServer

記事内に広告が含まれています。

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で前後レコードの値を参照する」の紹介でした。

システムトラストでは一緒に働いていただける仲間を募集中です。
株式会社システムトラスト

システムトラストでは、システムエンジニア、プログラマーなどを随時募集中です。気軽にご相談ください。

お問合せ