IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Problème sélection MAX() et GROUP BY


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 76
    Points : 37
    Points
    37
    Par défaut Problème sélection MAX() et GROUP BY
    Salut,

    J'ai un problème de sélection avec une requête incluant un MAX() et donc un GROUP BY.

    Voilà ma table : SUIVI_MISSION ( idSuiviMission,idMission,dateSuivi,idResponsable)

    Une mission peut avoir plusieurs dateSuivi. L'objectif de ma requête est de sélectionner la dateSuivi la plus récente pour chaque mission et les infos correspondantes. Mais qd j'utilise un MAX(dateSuivi) GROUP BY idMission, j'obtiens bien la date la + récente mais les autres champs ne correspondent pas à cette date (j'ai par exemple l'idSuiviMission et l'idResponsable de la date la + ancienne).
    Comment obtenir tout le tuple correspondant à la date la plus récente??
    Merci

    Nicolep

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    peux tu mettre ta requete?

  3. #3
    Membre éclairé Avatar de pop_up
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 877
    Points : 786
    Points
    786
    Par défaut
    essaye ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT idSuiviMission,idMission AS mission,dateSuivi,idResponsable
    FROM SUIVI_MISSION
    WHERE date_suivi IN (SELECT MAX(date_suivi) 
                                  FROM SUIVI_MISSION 
                                  WHERE idMission = mission)

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 76
    Points : 37
    Points
    37
    Par défaut
    Voici ma requête :

    SELECT
    sm.idSuiviMission,
    sm.idMission,
    max(sm.dateSuiviMission),
    sm.idResponsableSuiviMission

    FROM
    suivi_mission sm

    GROUP BY
    sm.idMission

    Et voici le pb avec une exemple :
    Dans ma table suivi_mission, j'ai les tuples suivants :

    idSuiviMission idMission dateSuivi idresponsable
    5 12 2007-06-12 3
    6 12 2007-09-20 3

    je souhaiterais obtenir le deuxième tuple, or j'obtiens un mix des 2!
    5 12 2007-09-20 3

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 76
    Points : 37
    Points
    37
    Par défaut
    Ah oui jai oublié de préciser, sur le serveur, c'est la version 4.0.2 de Mysql donc je ne peux pas utiliser de requêtes imbriquées..
    Du coup je suis peut etre obligé de créer une table temporaire??
    Doit bien y avoir un autre moyen!

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Points : 34
    Points
    34
    Par défaut
    Bonjour,

    J'ai le même soucis, il n'a pas été résolu ???

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Je rencontre le même problème, est-ce que quelqu'un aurait trouvé une solution ??

  8. #8
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    La question revient régulièrement : lors d'un regroupement une requête ne peut légitimement utiliser que les champs listés dans le 'GROUP BY' et des aggrégats (MAX, SUM, etc.). MySQL autorise quand même les autres mais ne garantie rien. Il faut voir ça comme une facilité d'écriture pour utiliser les champs constants pour chaque groupe.

    Bref, utiliser MAX n'a aucune raison d'influer sur les autres champs. Comment définir le résultat d'un "SELECT sm.idResponsableSuiviMission, MAX(sm.dateSuiviMission), MIN(sm.dateSuiviMission) [...]" ?


    Aucune solution simple. Si disponibles les sous-requêtes sont bien pratiques. Sinon il est possible d'utiliser une autojointure (qui se trouve dans le forum) mais c'est moche et lent. Il est aussi possible de faire tout simplement plusieurs requêtes.
    Si les performances sont critiques le mieux est peut-être de revoir la modélisation pour garder en permanance l'identifiant et/ou la date des derniers éléments (ici le dernier suivi_mission de chaque mission je présume). Il faut le tenir à jour mais récupérer le dernier devient trivial.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème SELECT, CASE et Group by
    Par Royd938 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 03/10/2014, 08h41
  2. Problème de sélection max(date)
    Par battit64 dans le forum SQL
    Réponses: 3
    Dernier message: 09/12/2013, 11h15
  3. Problème avec Max et Group By
    Par jacko842 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/09/2013, 20h27
  4. [Cognos 6][Impromptu] Problème avec les champs groupés
    Par nicoduhavre dans le forum Cognos
    Réponses: 4
    Dernier message: 23/03/2007, 16h27
  5. Problème select MAX(annee) dans une requête
    Par grisounette dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 28/10/2004, 18h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo