分析関数では、ウィンドウ範囲を指定する必要があります。デフォルトでは、between unbounded preceding and current row
です。 、私は自明だと思います。
基本的に、これは、partition by customer_id order by valid_from asc
を指定した場合に発生します。 :
- Oracleは、現在の行の
customer id
に一致するすべての行を取得します -
valid_from
の昇順で並べ替えます - 最小の
valid_from
で始まるウィンドウを形成します 日付で、現在の行のvalid_from
で終わります 。 -
last_value
を評価します 、現在の行のvalid_from
を返します 。
あなたがする必要があるのは、進行中の範囲を指定することです:
16:53:00 [email protected]> ed
Wrote file S:\spool\sandbox\BUFFER_SYSTEM_38.sql
1 select last_value(VALID_FROM) OVER (
2 partition by customer_id
3 ORDER BY VALID_FROM asc
4 range between current row and unbounded following
5 ) rn
6* from t
16:53:21 [email protected]> /
RN
---------------------------------------------------------------------------
04-DEC-13 11.07.01.000000 AM
04-DEC-13 11.07.01.000000 AM
04-DEC-13 11.07.01.000000 AM
Elapsed: 00:00:00.01