Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle SQL, preencha o valor ausente com o valor não ausente mais próximo


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.