[Résolu] MySQL : LEFT JOIN et GROUP BY - récupérer la dernière valeur

MySQL : LEFT JOIN et GROUP BY - récupérer la dernière valeur [Résolu] - SQL/NoSQL - Programmation

Marsh Posté le 16-06-2009 à 20:44:43    

Bonjour,
 
Je veux récupérer une liste de tous les anciens élèves avec les infos de leur dernier emploi :
nom, prénom, le nom de son dernier emploi et le pays de ce dernier emploi.
 
Table 'anciens' : liste des anciens élèves (nom, prenom)
 
Table 'emploi' : liste des emplois des anciens élèves (id_emploi, id_ancien, nom_travail,pays_travail)
 
Table 'type_pays' : liste de pays (id, libelle)
 

Code :
  1. SELECT DISTINCT el1.nom,el1.prenom,emp.nom_travail,tpaent.libelle
  2. FROM anciens el1
  3. LEFT JOIN emploi AS emp ON emp.id_ancien=el1.elev_id
  4. LEFT JOIN type_pays AS tpaent ON tpaent.id=emp.pays_travail
  5. GROUP BY emp.id_ancien
  6. ORDER BY emp.id_emploi DESC


 
Mon problème est que cela récupère le premier emploi (id_emploi le plus petit) de chaque ancien élève. La clause order by n'influe pas sur le group by et je ne sais pas comment faire.
 
Une idée ?
 
Merci infiniment!!


Message édité par doumeb le 17-06-2009 à 10:20:41
Reply

Marsh Posté le 16-06-2009 à 20:44:43   

Reply

Marsh Posté le 17-06-2009 à 10:20:22    

J'ai trouvé :
 

Code :
  1. SELECT DISTINCT el1.nom,el1.prenom,emp.nom_travail,tpaent.libelle
  2. FROM anciens el1
  3. LEFT JOIN emploi AS emp ON emp.id_ancien=el1.elev_id
  4. LEFT JOIN emploi emp2 ON emp2.id_ancien=emp.id_ancien
  5. LEFT JOIN type_pays tpaent ON tpaent.id=emp.pays_travail
  6. WHERE (
  7.     SELECT COUNT(*)
  8.     FROM emploi emp2
  9.     WHERE emp2.id_ancien = emp.id_ancien
  10.     AND emp2.id_emploi > emp.id_emploi
  11. ) < 1
  12. GROUP BY emp.id_ancien
  13. ORDER BY emp.id_emploi DESC

Reply

Marsh Posté le 17-06-2009 à 10:25:11    

Il n'y aurait pas, à tout hasard, une fonction pour récupérer le minimum en SQL ? Genre "MIN". Ca serait plus propre quand même.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed