Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle SQL, попълнете липсващата стойност с най-близката нелипсваща

Първата ви версия трябва да работи, с лека корекция:

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

Ощипването е да премахнете partition by v1 от lag() . coalesce() е моето предпочитание за по-прости изрази.

Същата настройка трябва да работи и за втората версия.

Вашата версия не работи, защото lag() стойността трябва да идва от същия дял (или да е null ). Когато имате partition by v1 , вие всъщност гарантирате, че v1 има същата стойност като в текущия ред.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да използвам запис за цикъл на референтен курсор?

  2. Извличане на списък с частни процедури/функции от тялото на пакета

  3. Критерии за хибернация за дати

  4. Как да картографирате TYPE TABLE OF VARCHAR2 (5) в java?

  5. Неяснота в левите съединения (само oracle?)