Ursprüngliche Antwort gelöscht, nicht durchführbar
Ich denke, das sollte in einer einzigen SQL-Anweisung machbar sein, aber bisher hat die Kombination aus der Notwendigkeit einer korrelierten Unterabfrage und der Notwendigkeit einer Art Analysefunktion alles, was ich versucht habe, zum Scheitern gebracht.
Hier ist eine prozedurale Methode, von der ich denke, dass sie das tut, was Sie wollen:
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;