Phiên bản đầu tiên của bạn sẽ hoạt động, với một chút tinh chỉnh:
select A.*,
coalesce(V1, lag(V1 ignore nulls) over (order by data)) V2
from Tab1 A;
Tinh chỉnh là loại bỏ phân vùng partition by v1
từ lag()
. coalesce()
chỉ là sở thích của tôi đối với các biểu thức đơn giản hơn.
Tinh chỉnh tương tự cũng sẽ hoạt động cho phiên bản thứ hai.
Phiên bản của bạn không hoạt động do lag()
giá trị phải đến từ cùng một phân vùng (hoặc null
). Khi bạn có partition by v1
, bạn đang thực sự đảm bảo rằng v1
có cùng giá trị như trong hàng hiện tại.