sql >> Databasteknik >  >> RDS >> Oracle

Oracle SQL, fyll saknat värde med det närmaste som inte saknas

Din första version borde fungera, med en liten justering:

select A.*, 
       coalesce(V1, lag(V1 ignore nulls)  over (order by data)) V2
from Tab1 A;

Tweaken är att ta bort partition by v1 från lag() . coalesce() är bara min förkärlek för enklare uttryck.

Samma justering bör fungera för den andra versionen också.

Din version fungerar inte eftersom lag() värdet måste komma från samma partition (eller vara null ). När du har partition by v1 , säkerställer du faktiskt att v1 har samma värde som på den aktuella raden.



  1. Avgränsare i MySQL

  2. Hur implementerar man INSERT ON DUPLICATE KEY UPDATE aka upsert i CakePHP 3?

  3. Pivoterar en tabell tillsammans med summan av kolumnvärdet när kolumntypen är nvarchar

  4. hur man väljer en lista med 10 000 unika ID från dual i oracle SQL