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 :

Requête de classement sur le dernier examen d'une liste de personnes


Sujet :

Langage SQL

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Requête de classement sur le dernier examen d'une liste de personnes
    Bonjour à tous, voici mon problème:
    J'ai une table "Examen" avec comme clés primaires l'identifiant d'une personne "id_personne" et le numéro d'examen "numero" (les autres colonnes ne sont pas importantes pour mon problème)

    Exemple:
    id_personne | numero | ...
    ----- 1 ----|--- 1
    ----- 1 ----|--- 2
    ----- 2 ----|--- 1
    ----- 2 ----|--- 2
    ----- 2 ----|--- 3
    ----- 3 ----|--- 1
    ...

    je désire sélectionner pour chaque personne l'examen le plus récent seulement c'est-à-dire que son numéro d'examen sera le plus grand parmi ceux qui existent pour lui.

    A la fin j'aurais donc:
    id_personne | numero | ...
    ----- 1 ----|--- 2
    ----- 2 ----|--- 3
    ----- 3 ----|--- 1
    ...

    J'espère que je suis compréhensible avec ces schémas et merci à ceux qui m'aideront.

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id_personne, MAX(numero)
    FROM Examen
    GROUP BY id_personne
    ça se trouve dans n'importe quel tuto SQL

    ensuite, si tu veux sélectionner d'autres informations, il faudra passer par une sous-requête pour faire le tri, ça deviendra plus complexe et plus lent...

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut on avance
    oui merci pour le MAX j'avais oublié son existence mais en fait les autres colonnes sont importantes car je veux aussi les sélectionner donc j'aimerais savoir s'il y a un moyen de le faire sans tous les énumérer dans ta requête... ta dit que c'était plus complexe mais si tu sais comment faire...

  4. #4
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    OK, alors si tu veux les autres colonnes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT E.id_personne, E.numero, ...
    FROM Examen E
    WHERE E.numero = (
       SELECT MAX(E2.numero)
       FROM Examen E2
       WHERE E2.id_personne = E.id_personne
    )
    il faut que ton SGDB supporte les sous-requêtes correllées (ce qui n'est pas forcément toujours le cas)

    le principe est celui là :

    on sélection les colonnes [SELECT E.id_personne, etc...]
    uniquement si [WHERE]
    le numero [E.numero]
    est le numéro MAX [MAX(E2.numero)]
    pour l'id en cours [WHERE E2.id_personne = E.id_personne]

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Hourraaa!!!

    je viens de tester avec une jointure sur une autre table qui a comme clé étrangère le numero d'exam et ça marche impec!!!

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 25/07/2013, 15h42
  2. [XL-2007] Classement sur deux colonnes en mettant une certaine valeur toute à la fin
    Par beegees dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/06/2011, 19h11
  3. Réponses: 4
    Dernier message: 09/02/2011, 11h01
  4. Itérateur sur l'avant-dernier élément d'une liste
    Par DJM400 dans le forum SL & STL
    Réponses: 8
    Dernier message: 15/12/2009, 18h33
  5. Réponses: 1
    Dernier message: 14/09/2007, 18h04

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