sql >> Database >  >> RDS >> Oracle

Oracle SQL, vul ontbrekende waarde in met de dichtstbijzijnde niet-ontbrekende

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.



  1. MySQL Krijg een rangorde van Leaderboards

  2. Oracle-tabelveranderingsmonitor

  3. SQL:ORDER BY twee kolommen vermengd, niet op basis van prioriteit

  4. Hoe kan ik waarde toewijzen aan een variabele met behulp van de aggregatiefunctie in mysql?