Borttaget originalsvar, inte genomförbart
Jag tycker att detta borde vara genomförbart i en enda SQL-sats, men hittills har kombinationen av behovet av en korrelerad underfråga och behovet av någon form av analytisk funktion gjort att allt jag försökte misslyckades.
Här är en procedurmetod som jag tror kommer att göra vad du vill:
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;