I analytiska funktioner måste du ange fönsterintervall. Som standard är det between unbounded preceding and current row , vilket jag antar är självförklarande.
I grund och botten är detta vad som händer när du anger partition by customer_id order by valid_from asc :
- Oracle tar alla rader som matchar den aktuella radens
customer id - Den ordnar dem i stigande ordning efter
valid_from - Det bildar ett fönster som börjar med minsta
valid_fromdatum och slutar med nuvarande radsvalid_from. - Den utvärderar
last_value, som returnerar din nuvarande radsvalid_from.
Vad du behöver göra är att ange ett pågående intervall:
16:53:00 example@sqldat.com> 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 example@sqldat.com> /
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