Din första version borde fungera, med en liten justering:
select A.*,
coalesce(V1, lag(V1 ignore nulls) over (order by data)) V2
from Tab1 A;
Tweaken är att ta bort partition by v1
från lag()
. coalesce()
är bara min förkärlek för enklare uttryck.
Samma justering bör fungera för den andra versionen också.
Din version fungerar inte eftersom lag()
värdet måste komma från samma partition (eller vara null
). När du har partition by v1
, säkerställer du faktiskt att v1
har samma värde som på den aktuella raden.