sql >> データベース >  >> RDS >> Oracle

PL / SQLでは、次の行に基づいて行をどのように更新しますか?

    マージステートメントを使用してみてください。それがあなたが望むことを完全に行うかどうかはわかりませんが、うまくいくはずです。残念ながら、挿入句は必要です)が、呼び出さないでください。

    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. SQLダンプからデータベースを復元するときにバイナリモードを有効にする

    2. PostgresGISTとBtreeインデックス

    3. テーブルからレコードが重複しないようにする方法挿入無視はここでは機能しません

    4. ハイブリッドクラウドでのMariaDBパフォーマンスの監視