En las funciones analíticas, debe especificar el rango de la ventana. De forma predeterminada, es between unbounded preceding and current row
, que supongo que se explica por sí mismo.
Básicamente, esto es lo que sucede cuando especificas partition by customer_id order by valid_from asc
:
- Oracle toma todas las filas que coincidan con el
customer id
de la fila actual - Los ordena en orden ascendente por
valid_from
- Forma una ventana que comienza con el mínimo
valid_from
fecha y finaliza con elvalid_from
de la fila actual . - Evalúa
last_value
, que devuelve elvalid_from
de su fila actual .
Lo que debe hacer es especificar un rango continuo:
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