有如下几种函数用法,
first_value, last_value, Nth_value
Partition By 是指按照什么项目分组,
ORDER BY 这个不用解释了。
IGNORE NULLS 忽视结果为Null的行。
グループ単位に、ソートしたレコードの先頭行の値を取得するには、FIRST_VALUE関数を使用する
分析関数のFIRST_VALUEは、ウィンドウ(window)を操作してレコードの先頭行の値を取得します。
FIRST_VALUE( 項目 [ IGNORE NULLS ] ) 引数で指定した項目値を、ソートしたレコードの先頭行から取得する。
IGNORE NULLSを指定すると、最初のNULLでない行の値が返されます。
OVER( [ PRTITION BY 項目1,
[項目2,・・] ]
ORDER BY 項目1,
[項目2,・・] )
FIRST_VALUE関数と一緒に使用します
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) 列「dept_id」別に、列「salary」を降順でソートしたレコードの先頭行から、「salary」の値をそれぞれ取得します。
SQL> select
2 emp_id, dept_id, salary,
3 first_value( salary )
4 over( partition by dept_id order by salary desc ) as first_salary
5 from emp01;
EMP_ID DEPT_ID SALARY FIRST_SALARY
----- ----- ------- ----------
E01 D01 150 150
E06 D02 600 600
E04 D02 400 600
E02 D02 200 600
E05 D03 500 500
E03 D03 300 500