Първата ви версия трябва да работи, с лека корекция:
select A.*,
coalesce(V1, lag(V1 ignore nulls) over (order by data)) V2
from Tab1 A;
Ощипването е да премахнете partition by v1
от lag()
. coalesce()
е моето предпочитание за по-прости изрази.
Същата настройка трябва да работи и за втората версия.
Вашата версия не работи, защото lag()
стойността трябва да идва от същия дял (или да е null
). Когато имате partition by v1
, вие всъщност гарантирате, че v1
има същата стойност като в текущия ред.