Hãy thử sử dụng một câu lệnh hợp nhất. Không chắc nó hoàn toàn làm được những gì bạn muốn nhưng nó sẽ hoạt động. Thật không may, mệnh đề chèn là cần thiết) nhưng không bao giờ nên được gọi.
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)