Dalam fungsi analitik Anda perlu menentukan rentang jendela. Secara default adalah between unbounded preceding and current row
, yang saya anggap cukup jelas.
Pada dasarnya, inilah yang terjadi ketika Anda menentukan partition by customer_id order by valid_from asc
:
- Oracle mengambil semua baris yang cocok dengan
customer id
baris saat ini - Ini mengurutkannya dalam urutan menaik dengan
valid_from
- Ini membentuk jendela yang dimulai dengan
valid_from
minimum tanggal, dan diakhiri denganvalid_from
baris saat ini . - Ini mengevaluasi
last_value
, yang mengembalikanvalid_from
baris Anda saat ini .
Yang perlu Anda lakukan adalah menentukan rentang yang sedang berlangsung:
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