Oorspronkelijk antwoord verwijderd, niet haalbaar
Ik vind dat dit mogelijk moet zijn in een enkele SQL-instructie, maar tot nu toe heeft de combinatie van de behoefte aan een gecorreleerde subquery en de behoefte aan een soort analytische functie ervoor gezorgd dat alles wat ik heb geprobeerd is mislukt.
Hier is een procedurele methode die volgens mij zal doen wat je wilt:
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;