sql >> Base de Datos >  >> RDS >> Oracle

En PL/SQL, ¿cómo actualiza una fila en función de la fila siguiente?

Intente usar una declaración de combinación. No estoy seguro de que haga lo que quieres, pero debería funcionar. Desafortunadamente, la cláusula de inserción es necesaria, pero nunca debería llamarse.

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)