Versi pertama Anda akan berfungsi, dengan sedikit penyesuaian:
select A.*,
coalesce(V1, lag(V1 ignore nulls) over (order by data)) V2
from Tab1 A;
Tweaknya adalah menghapus partition by v1
dari lag()
. coalesce()
hanya preferensi saya untuk ekspresi yang lebih sederhana.
Tweak yang sama juga berfungsi untuk versi kedua.
Versi Anda tidak berfungsi karena lag()
nilai harus berasal dari partisi yang sama (atau menjadi null
). Ketika Anda memiliki partition by v1
, Anda sebenarnya memastikan bahwa v1
memiliki nilai yang sama seperti pada baris saat ini.