In analytische functies moet u het vensterbereik specificeren. Standaard is het between unbounded preceding and current row
, waarvan ik aanneem dat het voor zich spreekt.
Dit is in feite wat er gebeurt als u partition by customer_id order by valid_from asc
:
- Oracle neemt alle rijen die overeenkomen met de
customer id
van de huidige rij - Het bestelt ze in oplopende volgorde door
valid_from
- Het vormt een venster dat begint met minimaal
valid_from
datum en eindigend met devalid_from
. van de huidige rij . - Het evalueert
last_value
, die devalid_from
. van uw huidige rij retourneert .
Wat u moet doen, is een doorlopend bereik opgeven:
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