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 :

Récupérer, groupés, les enregistrements à plus forte valeur dans un champ donné


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Récupérer, groupés, les enregistrements à plus forte valeur dans un champ donné
    Salut à tous,

    J'ai une table (sous SQL Server 2005) qui liste les performances de plusieurs joueurs à un jeu, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    +--------+--------+----------+
    | PRENOM | POINTS |   DATE   |
    +--------+--------+----------+
    | Julie  |    7   | 01/04/08 |
    | Marc   |   20   | 15/03/08 |
    | Louis  |    9   | 04/01/08 |
    | Julie  |   25   | 25/12/07 |
    | Julie  |   11   | 10/04/08 |
    | Marc   |   11   | 22/03/08 |
    | Claire |   20   | 08/04/08 |
    +--------+--------+----------+
    Ce que je voudrais faire, c'est récupérer, pour chaque joueur, sa meilleure performance, avec la date de cette dernière. En clair, j'aimerais récupérer un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    +--------+--------+----------+
    | PRENOM | POINTS |   DATE   |
    +--------+--------+----------+
    | Julie  |   25   | 25/12/07 |
    | Marc   |   20   | 15/03/08 |
    | Louis  |    9   | 04/01/08 |
    | Claire |   20   | 08/04/08 |
    +--------+--------+----------+
    Si quelqu'un a une idée et peut me donner une piste, ce serait super.

    A+

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    A essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT PRENOM, POINTS, DATE
    FROM Table
    GROUP BY PRENOM
    HAVING POINTS = MAX(POINTS)

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Salut CinePhil,

    Merci pour ton coup de main. J'ai testé ta requête et SQL Server me renvoit le message d'erreur suivant :
    La colonne 'table.POINTS' n'est pas valide dans la clause HAVING parce qu'elle n'est pas contenue dans une fonction d'agrégation ou dans la clause GROUP BY.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Alors dans ce cas essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT S1.Prenom, S1.Points, S1.DateScore
    FROM Scores S1
    INNER JOIN (
     SELECT Prenom, MAX( Points ) AS Maxi
     FROM Scores S
     GROUP BY Prenom
    )tmp ON S1.Prenom = tmp.Prenom
    AND S1.Points = tmp.Maxi
    J'ai testé sous MySQL et ça marche. J'ai renommé la colonne Date et DateScore pour éviter l'ambiguïté du nom et j'ai appelé ma table 'Scores' au lieu de 'Table' comme dans la première suggestion pour la même raison.

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Super, ça marche parfaitement ! Merci Cinephil

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

Discussions similaires

  1. [AC-2010] Récupérer l'avant dernière plus grande valeur d'un champ
    Par shakapouet dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 17/07/2012, 14h20
  2. Réponses: 6
    Dernier message: 23/05/2012, 16h54
  3. Réponses: 3
    Dernier message: 22/03/2012, 15h16
  4. Réponses: 3
    Dernier message: 03/03/2008, 19h02
  5. Réponses: 2
    Dernier message: 07/06/2006, 08h42

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