Câu trả lời ban đầu đã bị xóa, không khả thi
Tôi cảm thấy điều này có thể thực hiện được trong một câu lệnh SQL duy nhất, nhưng cho đến nay, sự kết hợp giữa nhu cầu về một truy vấn con tương quan và nhu cầu về một số loại chức năng phân tích đã khiến mọi thứ tôi thử đều thất bại.
Đây là một phương pháp thủ tục mà tôi nghĩ sẽ làm được những gì bạn muốn:
DECLARE
CURSOR t IS
SELECT LEAD(contractid,4) OVER (PARTITION BY assetid ORDER BY lasttradedate ASC) lead_contractid
FROM table1
FOR UPDATE;
BEGIN
FOR r IN t LOOP
UPDATE table1 SET nextcontractid = r.lead_contractid
WHERE CURRENT OF t;
END LOOP;
END;