Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle SQL, riempi il valore mancante con il più vicino non mancante

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.