Mysql
 sql >> Base de données >  >> RDS >> Mysql

LIMITE / DÉCALAGE dans Oracle 11G

Réponse originale supprimée, non viable

Je pense que cela devrait être faisable dans une seule instruction SQL, mais jusqu'à présent, la combinaison du besoin d'une sous-requête corrélée et du besoin d'une sorte de fonction analytique a fait échouer tout ce que j'ai essayé.

Voici une méthode procédurale qui, je pense, fera ce que vous voulez :

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;