|
スポンサード リンク
グループ単位に、検索したレコードのn行後のデータを取得するには、LEAD関数を使用する
分析関数のLEADは、ウィンドウ(window)を操作して、検索レコードのn行後のデータを取得します。
LEAD( 項目 ,[ 行数 ,デフォルト ] ) |
引数で指定した項目値を、指定した「行数」だけ後のレコードから取得する。
「行数」は省略時は「1」になります。
「デフォルト」は参照レコードが存在しない場合に返される値です。省略時は「NULL」が返されます。
|
OVER(
[ PRTITION BY 項目1,
[項目2,・・] ]
ORDER BY 項目1,
[項目2,・・] )
|
LEAD関数と一緒に使用します
PRTITION BY句には、グループ化対象項目を指定する
ORDERY BY句には、ソート対象の項目を指定する |
サンプル表「emp01」データ
|
SQL> select * from emp01;
EMP_ID DEPT_ID EMP_NAME YEARS SALARY
----- ----- ---------- ---------- ----------
E01 D01 なまえ1 3 150
E02 D02 なまえ2 7 200
E03 D03 なまえ3 7 300
E04 D02 なまえ4 7 400
E05 D03 なまえ5 3 500
E06 D02 なまえ6 3 600 |
例1) 列「salary」を昇順でソートしたレコードから、1レコード後の「salary」の値をそれぞれ取得します。
|
SQL> select
2 emp_id, salary,
3 lead( salary )
4 over( order by salary ) as foll_salary
5 from emp01;
EMP_ID SALARY FOLL_SALARY
----- ------- -----------
E01 150 200
E02 200 300
E03 300 400
E04 400 500
E05 500 600
E06 600 |
例2) 列「salary」を昇順でソートしたレコードから、2レコード後の「salary」の値をそれぞれ取得します。
|
SQL> select
2 emp_id,salary,
3 lead( salary, 2 )
4 over( order by salary ) as foll_salary
5 from emp01;
EMP_ID SALARY FOLL_SALARY
----- ------- -----------
E01 150 300
E02 200 400
E03 300 500
E04 400 600
E05 500
E06 600 |
例3) 列「salary」を「dept_id」別に昇順でソートしたレコードから、1レコード後の「salary」の値をそれぞれ取得します。
|
SQL> select
2 emp_id,dept_id,salary,
3 lead( salary )
4 over( partition by dept_id order by salary ) as foll_salary
5 from emp01;
EMP_ID DEPT_ID SALARY FOLL_SALARY
----- ----- ------- -----------
E01 D01 150
E02 D02 200 400
E04 D02 400 600
E06 D02 600
E03 D03 300 500
E05 D03 500 |
スポンサード リンク
|