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 :

LEFT JOIN avec MAX qui ne me retourne pas les bonnes données


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 60
    Points : 44
    Points
    44
    Par défaut LEFT JOIN avec MAX qui ne me retourne pas les bonnes données
    Bonjour,

    J'ai ces 2 tables :
    maint_liste (regroupe toutes les contrats de maintenance)
    idCtr, ...

    maint_inter (regroupe les interventions relatives aux contrats)
    idInter, idCtr, dateIntervention, technicien, ...

    Dans la table maint_inter sont stockées au fur et à mesure les interventions réalisées pour un contrat. Donc, il est possible qu'il n'y ait aucune intervention pour un contrat.
    Lorsque j'affiche la liste des contrats, je souhaite avoir qui a réalisé la dernière intervention et quand. J'ai donc basiquement fait cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT M.idCtr, M.numClient, M.ligne, M.contact, 
    M.commercial, M.dateDebut, M.dateFin, M.solde, 
    MAX(I.dateIntervention) as dateInter, I.technicien        
    FROM maint_liste M 
    LEFT JOIN maint_inter I 
        ON I.idCtr = M.idCtr 
    GROUP BY M.IdCtr
    ORDER BY M.idCtr DESC
    Le retour est bon concernant la dernière date d’intervention (ou en null), mais pas pour le technicien, ce n'est pas celui en rapport avec la date. Et là, j'avoue que je ne comprends pas pour un truc si simple. Si vous pouviez m'aider. Merci
    Mon petit monde ! www.worldofgz.com

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Dans votre requête, vous demandez de regrouper par Id de Contrat (ayant donc plusieurs interventions)
    Vous demandez la date d'intervention max, ça vous renvoie donc la date la plus récente de chaque Id Contrat.
    et vous demandez... le technicien. Oui, mais lequel ? Comme vous ne le précisez pas, MySQL vous renvoie n'importe quel technicien.

    Il faudrait supprimer votre group by, et ne prendre que les lignes pour lesquels il n'existe pas d'autre ligne ayant le même Id de contrat et une date plus récente.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 60
    Points : 44
    Points
    44
    Par défaut
    Je comprends la cause, mais je ne suis pas sûr de comprendre votre réponse.

    Je souhaite afficher tous mes contrats, d'où le GROUP BY idCtr
    Et afficher également le dernier intervenant et la date, mais si le contrat est récent, il n'y a pas d'intervention, donc retour "null" du max date

    En gros je ne pige pas comment faire
    Mon petit monde ! www.worldofgz.com

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Il y a plusieurs façons de faire, que vous pourrez trouver sur le forum.

    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT M.idCtr, M.numclient, I.dateIntervention, I.technicien
    FROM 	maint_liste M
    LEFT JOIN maint_inter I
    	LEFT JOIN maint_inter Suiv 
    		ON Suiv.idCtr = I.idCtr
    		AND Suiv.dateIntervention > I.dateIntervention
    	ON 	I.idCtr = M.idCtr
    	AND Suiv.IdCtr IS NULL

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 60
    Points : 44
    Points
    44
    Par défaut
    J'ai effectivement trouvé quelque chose de similaire sans la comprendre.
    Je vais essayer de mieux la comprendre, merci de l'aide
    Mon petit monde ! www.worldofgz.com

Discussions similaires

  1. Execute_query ne retourne pas les bonnes valeurs
    Par complicated dans le forum Forms
    Réponses: 2
    Dernier message: 23/11/2011, 11h12
  2. Faire un Left join avec pro*C
    Par xoum89 dans le forum SQL
    Réponses: 4
    Dernier message: 15/05/2009, 07h54
  3. left join avec max(date)
    Par supernicoco dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/10/2008, 08h53
  4. Left join avec 3 tables
    Par MathiasMathias dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/04/2007, 00h45
  5. LEFT JOIN avec Oracle 8i ne va pas... doit utiliser (+)
    Par loikiloik dans le forum Langage SQL
    Réponses: 10
    Dernier message: 21/04/2004, 16h38

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