Nelle funzioni analitiche è necessario specificare l'intervallo di finestre. Per impostazione predefinita è between unbounded preceding and current row
, che presumo sia autoesplicativo.
Fondamentalmente, questo è ciò che accade quando specifichi partition by customer_id order by valid_from asc
:
- Oracle prende tutte le righe corrispondenti all'
customer id
della riga corrente - Li ordina in ordine crescente per
valid_from
- Forma una finestra che inizia con
valid_from
minimo data e termina con ilvalid_from
della riga corrente . - Valuta
last_value
, che restituisce ilvalid_from
della riga corrente .
Quello che devi fare è specificare un intervallo 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