हटाया गया मूल उत्तर, व्यवहार्य नहीं
मुझे लगता है कि यह एक एकल SQL कथन में करने योग्य होना चाहिए, लेकिन अब तक एक सहसंबद्ध उपश्रेणी की आवश्यकता और किसी प्रकार के विश्लेषणात्मक कार्य की आवश्यकता के संयोजन ने मेरे द्वारा किए गए सभी प्रयासों को विफल कर दिया है।
यहां एक प्रक्रियात्मक तरीका है जो मुझे लगता है कि आप जो चाहते हैं वह करेंगे:
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;