La tua prima versione dovrebbe funzionare, con una leggera modifica:
select A.*,
coalesce(V1, lag(V1 ignore nulls) over (order by data)) V2
from Tab1 A;
Il tweak consiste nel rimuovere la partition by v1
dal lag()
. Il coalesce()
è solo la mia preferenza per espressioni più semplici.
La stessa modifica dovrebbe funzionare anche per la seconda versione.
La tua versione non funziona perché lag()
il valore deve provenire dalla stessa partizione (o essere null
). Quando hai partition by v1
, stai effettivamente assicurando che v1
ha lo stesso valore della riga corrente.