Jawaban asli yang dihapus, tidak dapat dijalankan
Saya merasa ini seharusnya dapat dilakukan dalam satu pernyataan SQL, tetapi sejauh ini kombinasi kebutuhan akan subquery yang berkorelasi dan kebutuhan akan semacam fungsi analitik telah membuat semua yang saya coba gagal.
Inilah metode prosedural yang menurut saya akan melakukan apa yang Anda inginkan:
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;