- カテゴリ:
ウィンドウ関数 (ランク関連、ウィンドウフレーム)
LAST_VALUE¶
値が順序付けられたグループ内の最後の値を返します。
- こちらもご参照ください。
構文¶
LAST_VALUE( <expr> ) [ { IGNORE | RESPECT } NULLS ]
OVER ( [ PARTITION BY <expr1> ] ORDER BY <expr2> [ { ASC | DESC } ] [ <window_frame> ] )
ウィンドウフレーム
構文の詳細については、 ウィンドウフレームの構文と使用法 をご参照ください。
使用上の注意¶
他のシステムでこの関数の実装における互換性を保つために、関数の引数で
{ IGNORE | RESPECT } NULLS
を指定することもできます。LAST_VALUE( <式> [ { IGNORE | RESPECT } NULLS ] ) OVER ...
{ IGNORE | RESPECT } NULLS
が指定されていない場合、デフォルトはRESPECT NULLS
です。つまり、式に NULL 値が含まれ、式の最後の値である場合、 NULL 値が返されます。LAST_VALUE はランク関連の関数であるため、次の要素で構成されるウィンドウを指定する必要があります。
PARTITION BY <式1>
副次句(オプション)。オプションの
ウィンドウフレーム
付き、ORDER BY <式2>
副次句(必須)。サポートされている追加の順序付けオプション(並べ替え順序、NULL値の順序付けなど)の詳細については、 ORDER BY クエリ構成をご参照ください。
オプションの
ウィンドウフレーム
(累積またはスライド)は、関数が計算されるウィンドウ内の行のサブセットを指定します。ウィンドウフレームの場合、この関数は RANGEベースのウィンドウフレームではなく、 ROWSベースのウィンドウフレームのみをサポートします。
- サポート対象
ROWS BETWEEN ... AND ...
- サポート対象外
RANGE BETWEEN ... AND ...
ウィンドウフレーム
が指定されていない場合、デフォルトはウィンドウ全体です。ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
これは、ウィンドウフレームに次のデフォルトを指定する ANSI 標準とは 異なります。
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
構文や例を含むウィンドウフレームの詳細については、 ウィンドウフレームの構文と使用法 をご参照ください。
例¶
SELECT
column1,
column2,
LAST_VALUE(column2) OVER (PARTITION BY column1 ORDER BY column2) AS column2_last
FROM VALUES
(1, 10), (1, 11), (1, 12),
(2, 20), (2, 21), (2, 22);
+---------+---------+--------------+
| COLUMN1 | COLUMN2 | COLUMN2_LAST |
|---------+---------+--------------|
| 1 | 10 | 12 |
| 1 | 11 | 12 |
| 1 | 12 | 12 |
| 2 | 20 | 22 |
| 2 | 21 | 22 |
| 2 | 22 | 22 |
+---------+---------+--------------+
次のクエリは、 FIRST_VALUE
、 NTH_VALUE
、および LAST_VALUE
の出力を対比します。注意:
クエリは、幅が3行分のスライディングウィンドウフレームを作成します。これには、次のものが含まれます。
現在の行の前の行。
現在の行。
現在の行に続く行。
呼び出し
NTH_VALUE(i, 2)
の2
は、ウィンドウフレームの2番目の行(この場合は現在の行でもある)を指定します。現在の行がウィンドウフレームの最初の行である場合、参照する前の行がないため、
FIRST_VALUE()
はその行に対して NULL を返します。
SELECT
partition_col, order_col, i,
FIRST_VALUE(i) OVER (PARTITION BY partition_col ORDER BY order_col
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS FIRST_VAL,
NTH_VALUE(i, 2) OVER (PARTITION BY partition_col ORDER BY order_col
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS NTH_VAL,
LAST_VALUE(i) OVER (PARTITION BY partition_col ORDER BY order_col
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS LAST_VAL
FROM demo1
ORDER BY partition_col, i, order_col;
+---------------+-----------+---+-----------+---------+----------+
| PARTITION_COL | ORDER_COL | I | FIRST_VAL | NTH_VAL | LAST_VAL |
|---------------+-----------+---+-----------+---------+----------|
| 1 | 1 | 1 | NULL | 1 | 2 |
| 1 | 2 | 2 | 1 | 2 | 3 |
| 1 | 3 | 3 | 2 | 3 | 4 |
| 1 | 4 | 4 | 3 | 4 | 5 |
| 1 | 5 | 5 | 4 | 5 | 5 |
| 2 | 1 | 1 | NULL | 1 | 2 |
| 2 | 2 | 2 | 1 | 2 | 3 |
| 2 | 3 | 3 | 2 | 3 | 4 |
| 2 | 4 | 4 | 3 | 4 | 4 |
+---------------+-----------+---+-----------+---------+----------+