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 :
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
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 );
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é.
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 ) ;
Merci pour votre aide !
Partager