Su primera versión debería funcionar, con una ligera modificación:
select A.*,
coalesce(V1, lag(V1 ignore nulls) over (order by data)) V2
from Tab1 A;
El ajuste es eliminar la partición partition by v1
del lag()
. El coalesce()
es solo mi preferencia por expresiones más simples.
El mismo ajuste también debería funcionar para la segunda versión.
Tu versión no funciona porque lag()
el valor debe provenir de la misma partición (o ser null
). Cuando tienes partition by v1
, en realidad te estás asegurando de que v1
tiene el mismo valor que en la fila actual.