Requete SQL

Résolu
Franck -  
 Franck -
Bonjour,

Je voudrais faire la requete suivante :

Récupérer les identifiants de toutes les dernières commandes des clients.

SELECT MAX(DateCmd), IDClient
FROM Commande
GROUP BY IDClient;

Cette requete me renvoit bien les dernieres commandes, mais je voudrais les ID de ces requetes.

La requete suivante ;
SELECT MAX(DateCmd), IDCommande
FROM Commande
GROUP BY IDCommande;
me renvoie bien sur tous les enregistrements et pas seulement les dernieres commandes.

J'ai l'impression que c'est une requete toute simple, mais je n'y arrive pas...

Merci de votre aide.

6 réponses

  1. Stringman621 Messages postés 1726 Date d'inscription   Statut Membre Dernière intervention   340
     
    Bonjour,

    Petite précision tu recherche, la dernière commande pour chaque client c'est bien ca ?
    0
  2. Franck
     
    Oui c'est exactement ca. Il me faut surtout les ID ce des commandes.

    Merci
    0
  3. Stringman621 Messages postés 1726 Date d'inscription   Statut Membre Dernière intervention   340
     
    Je ne connais pas la structure de ta table COMMANDE mais je suppose qu'en clé étrangère tu doit avec l'id du client, donc la requête pourrait être :

    SELECT MAX(DateCmd), IDCommande, IDClient
    FROM Commande
    GROUP BY IDClient;

    Je ne suis pas sûr de la requête j'ai un doute sur le GROUP BY du fait que l'on utilisate la fonction MAX() il va peut être demandé IDCommande dans le GROUP BY mais essaie comme ça...
    0
  4. Stringman621 Messages postés 1726 Date d'inscription   Statut Membre Dernière intervention   340
     
    Ou alors, en utilisant une sous-requête :

    SELECT IDCommande
    FROM Commande
    WHERE DateCmd IN (
    SELECT MAX(DateCmd)
    FROM COMMANDE
    GROUP BY IDClient);
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Heremion Messages postés 564 Statut Membre 102
     
    Bonjour Franck,

    Ta requête est correcte et, en admettant que tes ID_COMMAND soient des auto_incrément, pourquoi ne pas lancer un
    order by ID_COMMAND desc
    ?
    0
  7. Franck
     
    La requete suivante ne fonctionne pas :
    SELECT MAX(DateCmd), IDCommande, IDClient
    FROM Commande
    GROUP BY IDClient;

    Il manque une rubrique dans le group by (IDCommande)
    Mais si on l'ajoute, on a toutes les commandes

    La requete suivante ne fonctionne pas non plus :
    SELECT IDCommande
    FROM Commande
    WHERE DateCmd IN (
    SELECT MAX(DateCmd)
    FROM COMMANDE
    GROUP BY IDClient);

    Cette requete renvoie une ligne suplémentaire pour chaque commande avec la même date.

    On m'a donné une solution qui marche tres bien :
    SELECT tmp.IDClient, tmp.date_derniere_commande, c.IDCommande
    FROM Commande c
    INNER JOIN
    (
    SELECT IDClient, MAX(DateCmd) AS date_derniere_commande
    FROM Commande
    GROUP BY IDClient
    ) tmp
    ON tmp.IDClient = c.IDClient
    AND tmp.date_derniere_commande = c.DateCmd


    Merci pour votre aide
    0