Trong các hàm phân tích, bạn cần chỉ định phạm vi cửa sổ. Theo mặc định, nó là between unbounded preceding and current row , mà tôi cho là tự giải thích.
Về cơ bản, đây là những gì sẽ xảy ra khi bạn chỉ định phân vùng partition by customer_id order by valid_from asc :
- Oracle lấy tất cả các hàng khớp với
customer idcủa hàng hiện tại - Nó sắp xếp chúng theo thứ tự tăng dần theo
valid_from - Nó tạo thành một cửa sổ bắt đầu bằng
valid_fromtối thiểu ngày và kết thúc bằngvalid_fromcủa hàng hiện tại . - Nó đánh giá
last_value, trả vềvalid_fromcủa hàng hiện tại của bạn .
Những gì bạn cần làm là chỉ định một phạm vi liên tục:
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