- カテゴリ:
ウィンドウ関数 (ランク関連)
LEAD¶
テーブルをそれ自体に結合することなく、同じ結果セットの後続の行のデータにアクセスします。
- こちらもご参照ください:
構文¶
LEAD ( <expr> [ , <offset> , <default> ] ) [ { IGNORE | RESPECT } NULLS ] OVER ( [ PARTITION BY <expr1> ] ORDER BY <expr2> [ { ASC | DESC } ] )
引数¶
expr
返される文字列式です。
offset
値を取得する現在の行から前方の行数。たとえば、2の
offset
は、2行の間隔でexpr
の値を返します。負のオフセットを設定すると、 LAG 関数を使用した場合と同じ効果があります。
デフォルトは1です。
IGNORE NULLS
が指定されている場合、最大値は1,000,000です。default
オフセットがウィンドウの境界から出たときに返す式です。
expr
と互換性のある型の式をサポートします。デフォルトは NULLです。
使用上の注意¶
IGNORE NULLS 句が設定されている場合、オフセット行がカウントされるときに式が NULL と評価される行は含まれません。
{ IGNORE | RESPECT } NULLS
が指定されていない場合、デフォルトはRESPECT NULLS
です。PARTITION BY
句は、 FROM 句によって生成された結果セットを関数が適用されるパーティションに分割します。この句とORDER BY
句の詳細については、 ウィンドウ関数 をご参照ください。ORDER BY
句は、各パーティション内のデータを順序付けます。
例¶
CREATE OR REPLACE TABLE sales(emp_id INTEGER, year INTEGER, revenue DECIMAL(10,2));
INSERT INTO sales VALUES (0, 2010, 1000), (0, 2011, 1500), (0, 2012, 500), (0, 2013, 750);
INSERT INTO sales VALUES (1, 2010, 10000), (1, 2011, 12500), (1, 2012, 15000), (1, 2013, 20000);
INSERT INTO sales VALUES (2, 2012, 500), (2, 2013, 800);
SELECT emp_id, year, revenue, LEAD(revenue) OVER (PARTITION BY emp_id ORDER BY year) - revenue AS diff_to_next FROM sales ORDER BY emp_id, year;
+--------+------+----------+--------------+
| EMP_ID | YEAR | REVENUE | DIFF_TO_NEXT |
|--------+------+----------+--------------|
| 0 | 2010 | 1000.00 | 500.00 |
| 0 | 2011 | 1500.00 | -1000.00 |
| 0 | 2012 | 500.00 | 250.00 |
| 0 | 2013 | 750.00 | NULL |
| 1 | 2010 | 10000.00 | 2500.00 |
| 1 | 2011 | 12500.00 | 2500.00 |
| 1 | 2012 | 15000.00 | 5000.00 |
| 1 | 2013 | 20000.00 | NULL |
| 2 | 2012 | 500.00 | 300.00 |
| 2 | 2013 | 800.00 | NULL |
+--------+------+----------+--------------+
CREATE OR REPLACE TABLE t1 (c1 NUMBER, c2 NUMBER);
INSERT INTO t1 VALUES (1,5),(2,4),(3,NULL),(4,2),(5,NULL),(6,NULL),(7,6);
SELECT c1, c2, LEAD(c2) IGNORE NULLS OVER (ORDER BY c1) FROM t1;
+----+------+------------------------------------------+
| C1 | C2 | LEAD(C2) IGNORE NULLS OVER (ORDER BY C1) |
|----+------+------------------------------------------|
| 1 | 5 | 4 |
| 2 | 4 | 2 |
| 3 | NULL | 2 |
| 4 | 2 | 6 |
| 5 | NULL | 6 |
| 6 | NULL | 6 |
| 7 | 6 | NULL |
+----+------+------------------------------------------+