Twoja pierwsza wersja powinna działać, z niewielką poprawką:
select A.*,
coalesce(V1, lag(V1 ignore nulls) over (order by data)) V2
from Tab1 A;
Ulepszenie polega na usunięciu partition by v1
z lag()
. coalesce()
to tylko moja preferencja dla prostszych wyrażeń.
Ta sama zmiana powinna działać również w drugiej wersji.
Twoja wersja nie działa, ponieważ lag()
wartość musi pochodzić z tej samej partycji (lub być null
). Gdy masz partition by v1
, faktycznie zapewniasz, że v1
ma taką samą wartość jak w bieżącym wierszu.