Vaše první verze by měla fungovat s drobnými úpravami:
select A.*,
coalesce(V1, lag(V1 ignore nulls) over (order by data)) V2
from Tab1 A;
Tweak spočívá v odstranění partition by v1 z lag() . coalesce() je jen moje preference pro jednodušší výrazy.
Stejné vyladění by mělo fungovat i pro druhou verzi.
Vaše verze nefunguje, protože lag() hodnota musí pocházet ze stejného oddílu (nebo musí být null ). Když máte partition by v1 , ve skutečnosti zajišťujete, že v1 má stejnou hodnotu jako v aktuálním řádku.