Forum Programmation.SQL Requête MYSQL: Distinct ? Group ?

Posté par .
Tags : aucun
0
1
août
2006
Bonjour, après des mois de recherche, je n'ai toujours pas réussi à faire fonctionner cette petite requête toute simple.

Les champs:

poste, annee, nom


Les données:

pdg, 2004, tim
finances, 2005, vic
marketing, 2005, bob
pdg, 2005, luc
finances, 2006, joe


Comment faire pour récupérer la liste des employés actuels?
Merci
  • # des mois ?!

    Posté par . Évalué à 1.

    vu que la réponse à ta question semble se résoudre avec un simple
    select ...where, j'ai du mal à comprendre comment tu as pu perdre autant de temps la dessus.
  • # Pas d'autres contraintes ?

    Posté par . Évalué à 1.

    Si tu souhaites la liste des employés actuels, la requête est la suivante :

    select nom
    from
    <ta_table>
    where
    annee=2006

    mais je pense que tu n'as pas exprimé ton problème de manière complète ..
    • [^] # Re: Pas d'autres contraintes ?

      Posté par . Évalué à 1.

      Annee <= 2006 , sinon il chope que les gens embauchés cette année. (Enfin si le champ année est bien l'année d'embauche tout du moins)
  • # subquery

    Posté par . Évalué à 2.

    En fait je pense que tu souhaites "le nom de la personne qui a été engagée le plus recemment pour un poste donné, qu'importe l'année"

    Si c'est le cas et que ton mysql est pas trop vieux (>= 4.1 il me semble), ceci ira :

    select t1.*
    from t t1, (select poste, max(annee) a from t group by poste) t2
    where t1.poste = t2.poste
    and t1.annee = t2.a;


    Ya surement d'autres moyens :)
    • [^] # Re: subquery

      Posté par . Évalué à 1.

      Merci,

      Je ne peux malheuresuement tester pour l'instant (fin de semaine ;)), mais je vais y jeer un coup d'oeil dès mardi matin (longue fin de semaine ;)).

      Ah, j'avais pensé faire justement ça en deux requêtes, mais j'espérais que cela fonctionne en juste une.
    • [^] # Ne fonctionne pas dans mysql 4.1.18

      Posté par . Évalué à 1.

      Malheureusement, la requête ne fonctionne pas dans MySQL 4.1.18.
      Cela ne génère pas d'erreur, seulement aucun résultat.

      Il semblerait que ce soit l'ajout du max et group by qui fasse ne pas fonctionner le tout. Si j'essaie cette requête bidon, ça fonctionne.

      SELECT `representants` . *
      FROM `representants` AS t1 , (

      SELECT `annee` , `poste`
      FROM `representants`
      WHERE `annee` =2006

      ) AS t2
      WHERE (
      `t1`.`poste` = `t2`.`poste`
      AND `t1`.`annee` = `t2`.`annee`
      );


      Est-ce que quelqu'un connait une manière d'y arriver tout de même?
      Merci
  • # Précisions

    Posté par . Évalué à 1.

    Pour préciser:

    Oui l'année est l'année d'embaûche.
    Je ne veux que l'employé le plus récent à chacun des poste, et vu que les années diffèrent et ne sont pas non plus nécessairement l'année actuelle, il faut y aller par une requête du type que Duaner a présenté.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.