Salut,
je désire mettre à jour une colonne dans Oracle à partir d'un calcul MIN() d'une date. Rien de compliqué mais je n'arrive pourtant pas à trouver la bonne syntaxe.
Pour faire simple, j'ai 2 tables T1 et T2 avec comme champs :
PO : Clé primaire
DT : Date

Je veux mettre à jour T1 avec le MIN (DT) de T2, uniquement si la date est différente.

Exemples :
T1 :
1 | 15/01/2012
2 | 30/03/2012
3 | 01/05/2012

T2 :
1 | 10/01/2012
1 | 15/01/2012
2 | 30/03/2012
2 | 14/04/2012

Résultats attendus dans T1 : 1 update de la première ligne
1 | 10/01/2012
2 | 30/03/2012
3 | 01/05/2012

J'ai fait ça comme requête mais je n'ai que des update (les 3 lignes) à NULL et je ne vois pas pourquoi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
UPDATE T1 set dt = 
   (
       SELECT 
         MIN_DT 
       FROM (SELECT PO, MIN (DT) AS MIN_DT
             from T2 RCL
             GROUP BY PO
            ) A
       WHERE T1.PO = A.PO
             AND T1.DT != A.MIN_DT
    );
Cette autre solution fonctionne et j'update avec la bonne valeur mais sur toutes les lignes même si la date est bonne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
UPDATE T1 set dt = 
   (
       SELECT 
         MIN(DT) AS MIN_DT
       FROM (SELECT PO, DT
             from T2
            ) A
       WHERE T1.PO = A.PO
    )
;
J'ai bien une autre solution qui fonctionne mais en ayant un WHERE sur l'update avec une sous requête dans laquelle je recalcule le MIN() donc c'est pas top et j'imagine qu'on peut faire plus optimisé.

Merci pour votre aide !