Sua primeira versão deve funcionar, com um pequeno ajuste:
select A.*,
coalesce(V1, lag(V1 ignore nulls) over (order by data)) V2
from Tab1 A;
O ajuste é remover a
partition by v1
do lag()
. A coalesce()
é apenas minha preferência por expressões mais simples. O mesmo ajuste deve funcionar para a segunda versão também.
Sua versão não funciona porque o
lag()
o valor deve vir da mesma partição (ou ser null
). Quando você tem partition by v1
, você está realmente garantindo que v1
tem o mesmo valor que na linha atual.