Първата ви версия трябва да работи, с лека корекция:
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 има същата стойност като в текущия ред.