Je eerste versie zou moeten werken, met een kleine aanpassing:
select A.*,
coalesce(V1, lag(V1 ignore nulls) over (order by data)) V2
from Tab1 A;
De tweak is om de partition by v1
van de lag()
. De coalesce()
is gewoon mijn voorkeur voor eenvoudigere uitdrukkingen.
Dezelfde aanpassing zou ook moeten werken voor de tweede versie.
Uw versie werkt niet omdat de lag()
waarde moet van dezelfde partitie komen (of null
zijn) ). Wanneer u partition by v1
. heeft , zorgt u er feitelijk voor dat v1
heeft dezelfde waarde als in de huidige rij.