Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle SQL, fehlenden Wert mit dem nächsten nicht fehlenden Wert füllen

Ihre erste Version sollte mit einer kleinen Anpassung funktionieren:

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

Die Optimierung besteht darin, die partition by v1 zu entfernen aus dem lag() . Die coalesce() ist nur meine Vorliebe für einfachere Ausdrücke.

Die gleiche Optimierung sollte auch für die zweite Version funktionieren.

Ihre Version funktioniert nicht, weil lag() Der Wert muss aus derselben Partition stammen (oder null sein ). Wenn Sie partition by v1 haben stellen Sie tatsächlich sicher, dass v1 hat denselben Wert wie in der aktuellen Zeile.