Update avec MIN() conditionnel
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:
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:
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 !