Dans les fonctions analytiques, vous devez spécifier la plage de fenêtres. Par défaut, c'est between unbounded preceding and current row
, que je suppose être explicite.
En gros, c'est ce qui se passe lorsque vous spécifiez partition by customer_id order by valid_from asc
:
- Oracle prend toutes les lignes correspondant à l'
customer id
de la ligne actuelle - Il les classe dans un ordre croissant par
valid_from
- Il forme une fenêtre commençant par minimum
valid_from
date, et se terminant parvalid_from
de la ligne actuelle . - Il évalue
last_value
, qui renvoie levalid_from
de votre ligne actuelle .
Ce que vous devez faire est de spécifier une plage continue :
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