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.