Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

Retourner aux forums || Retourner au forum Programmation.SQL

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

Posté par bichenoubi () le 31 juillet 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

> Lire le message (7 commentaires, moyenne: 1,3).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

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

des mois ?!

Posté par B. franck () le 01/08/2006 à 01:29. (lien). É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 cumulus () le 01/08/2006 à 10:22. (lien). É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 Zandu () le 01/08/2006 à 12:36. (lien). É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 duaner () le 01/08/2006 à 14:49. (lien). É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 bichenoubi () le 05/08/2006 à 22:28. (lien). É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 bichenoubi () le 09/08/2006 à 03:50. (lien). É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 bichenoubi () le 05/08/2006 à 22:38. (lien). É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é.

Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.SQL