В аналитичните функции трябва да посочите диапазон на прозореца. По подразбиране е between unbounded preceding and current row
, което предполагам, че се обяснява само по себе си.
По принцип това се случва, когато посочите partition by customer_id order by valid_from asc
:
- Oracle взема всички редове, съответстващи на
customer id
на текущия ред - Той ги подрежда във възходящ ред по
valid_from
- Оформя прозорец, започващ с минимум
valid_from
дата и завършва сvalid_from
на текущия ред . - Оценява
last_value
, който връщаvalid_from
на текущия ви ред .
Това, което трябва да направите, е да посочите текущ диапазон:
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