sql >> Databasteknik >  >> RDS >> Oracle

I PL/SQL, hur uppdaterar du en rad baserat på nästa rad?

Prova att använda ett sammanslagningsuttryck. Jag är inte säker på att den gör som du vill men den borde fungera. Tyvärr är insert-satsen nödvändig) men bör aldrig kallas.

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)


  1. Var kan man använda mysql_real_escape_string för att förhindra SQL-injektion?

  2. Hur man subtraherar timmar från ett datum i Oracle så att det också påverkar dagen

  3. Hur man hanterar främmande nyckel vid partitionering

  4. Hur ändrar jag MySQL root-lösenord till standard?