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

Wie aktualisieren Sie in PL/SQL eine Zeile basierend auf der nächsten Zeile?

Versuchen Sie es mit einer Merge-Anweisung. Ich bin mir nicht sicher, ob es genau das tut, was Sie wollen, aber es sollte funktionieren. Leider ist die Insert-Klausel notwendig), sollte aber niemals aufgerufen werden.

merge into t a
using (
  select 
    A, 
    B, 
    timestamp, 
    lag(A) over (order by id, timestamp) as prior_A,
    lag(timestamp) over (order by B, timestamp) as prior_timestamp
  from t) b
on  (a.B = b.B)
when matched then 
  update set a.a = case when b.timestamp-b.prior_timestamp <= 45 
    then b.prior_A else b.A end
when not matched then insert (B) values (null)