I analytiske funktioner skal du angive vinduesområde. Som standard er det between unbounded preceding and current row
, hvilket jeg antager er selvforklarende.
Grundlæggende er dette, hvad der sker, når du angiver partition by customer_id order by valid_from asc
:
- Oracle tager alle rækker, der matcher den aktuelle rækkes
customer id
- Den sorterer dem i stigende rækkefølge efter
valid_from
- Det danner et vindue, der starter med minimum
valid_from
dato og slutter med den aktuelle rækkesvalid_from
. - Den evaluerer
last_value
, som returnerer din nuværende rækkesvalid_from
.
Det du skal gøre er at angive et løbende interval:
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