1 -
2 - Non ce n'est pas optimisé :
1 2 3 4
| SELECT MAX(datecommande)
FROM commande
WHERE commande.numclient=client.numclient
GROUP BY numclient |
Le group BY numclient ne sert à rien vu que tu restreint déjà au numclient
WHERE numclient IN (SELECT DISTINCT(numclient) FROM commande)
Pas super bon. Mieux vaut utiliser un EXISTS qu'un IN généralement.
Et puis le DISTINCT n'est pas utile dans un IN
Voici ce que j'aurais fait :
1 2 3 4 5 6 7
| UPDATE CLIENT cl
SET datedernierecommande=(
SELECT MAX(datecommande)
FROM COMMANDE b
WHERE b.numclient=cl.numclient)
WHERE EXISTS (SELECT 1 FROM COMMANDE co
WHERE co.numclient = cl.numclient) |
Et si c'est une requete qui va tourner plus d'une fois faut rajouter le test que la date change sinon, tu réupdate tous les clients.
1 2 3 4
| AND NVL(datedernierecommande, TO_DATE('01.01.0001','DD.MM.YYYY')
<> (SELECT MAX(datecommande)
FROM COMMANDE b
WHERE b.numclient=cl.numclient |
Partager