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

Langage SQL Discussion :

Requete simple qui me pose probleme


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Requete simple qui me pose probleme
    Bonjour,

    J'essai d'effectuer une requete SQL simple mais je n'ai pas le résultat voulu.
    Je m'explique : J'ai une seule table

    histo
    ----------
    id_histo
    id_evenement
    etat_evenement

    ex d'enregistrement :
    1 , 1 , 'Pas fait';
    2 , 1 , 'En cours';
    3 , 2 , 'Pas fait';
    4 , 2 , 'Fait';

    Je voudrai afficher la liste des id_evenement avec l'etat évenement associé mais seulement pour les valeur maximum de id_histo.

    Dans le cas précedent, ca donnerai :
    2 , 1 , 'En cours';
    4 , 2 , 'Fait'

    La requete que j ai faite est : (mais le résultat est erroné)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT MAX(id_histo)
         ,id_evenement
         ,etat_evenement  
    FROM histo 
    GROUP BY id_evenement;
    Du coup je seche completement.

    Merci beaucoup de votre aide

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Bonjour,

    Vous pouvez récupérer dans un premier temps l'id_histo max pour chaque id_evenement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
         select max(id_histo) as id_histo_max, id_evenement
         from histo
         group by id_evenement
    Vous faites ensuite la jointure avec votre table d'origine pour ne conserver que ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select histo.id_histo, histo.id_evenement, histo.etat_evenement
    from histo
    join (
         select max(id_histo) as id_histo_max, id_evenement
         from histo
         group by id_evenement
         ) histomax
         ON histomax.id_evenement = histo.id_evenement
         AND histomax.id_histo_max = histo.id_histo

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Coll merci beaucoup, ca marche.

    maintenant à la place de id_evenement j'aimerai afficher lib_evenement qui se trouve dans une seconde table "evenement"

    evenement
    --------------
    id_evenement
    lib_evenement

    exemple d'enregistrment :
    1 , 'Réunion';
    2 , 'Congrés';


    ex de resultat :

    2 , 'Réunion' , 'En cours';
    4 , 'Congrés' , 'Fait';

    J'ai essayé plusieurs trucs avec WHERE mais à priori ca ne doit pas etre comme ça

    Encore merci pour votre aide.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Il suffit de rajouter une jointure avec cette table sur l'id_evenement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT histo.id_histo, evenement.lib_evenement, histo.etat_evenement
    FROM histo
    JOIN (
         SELECT max(id_histo) AS id_histo_max, id_evenement
         FROM histo
         GROUP BY id_evenement
         ) histomax
         ON histomax.id_evenement = histo.id_evenement
         AND histomax.id_histo_max = histo.id_histo
    JOIN evenement
         ON evenement.id_evenement = histo.id_evenement

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Alors Là... Un grand Merci

    Et comme on dit "Bravo l'artiste"

    Ca me debloque une grosse partie de mon code...

    Encore Merci

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

Discussions similaires

  1. inner join qui me pose probleme
    Par backdraf dans le forum Développement
    Réponses: 4
    Dernier message: 26/08/2010, 11h18
  2. [PostgreSql] requête simple qui ne renvoie rien ?
    Par tuxout dans le forum Langage SQL
    Réponses: 6
    Dernier message: 03/08/2006, 15h06
  3. [PHP-JS] Script qui me pose de grands problemes
    Par MadSoldier dans le forum Langage
    Réponses: 3
    Dernier message: 22/06/2006, 22h33
  4. probleme de requete mysql qui ne s'exécute pas
    Par anto48_4 dans le forum Requêtes
    Réponses: 6
    Dernier message: 23/03/2006, 11h51
  5. Requete MySql qui bloque. Probleme de table?
    Par Doberman dans le forum Requêtes
    Réponses: 4
    Dernier message: 06/02/2006, 21h28

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