Din første version burde virke, med en lille justering:
select A.*,
coalesce(V1, lag(V1 ignore nulls) over (order by data)) V2
from Tab1 A;
Tweaken er at fjerne partition by v1
fra lag()
. coalesce()
er bare min præference for enklere udtryk.
Den samme tweak burde også virke for den anden version.
Din version virker ikke, fordi lag()
værdi skal komme fra den samme partition (eller være null
). Når du har partition by v1
, sikrer du faktisk, at v1
har samme værdi som i den aktuelle række.