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 :

Problème avec min(date) dans un select


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 90
    Points : 36
    Points
    36
    Par défaut Problème avec min(date) dans un select
    Bonjour,

    J'ai un problème avec mon code et je n'arrive pas à identifier mon problème. Je souhaite afficher une ligne de ma table avec la date la plus basse. Cependant, impossible de n'afficher qu'une seule valeur. Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT prenom_joueur 'Prenom',nom_joueur 'Nom',min(date_naissance_joueur) 'Date de naissance'
    FROM joueurs
    WHERE id_equipe_joueur IN (SELECT id_equipe FROM equipes WHERE id_tournoi_equipe = 2)
    GROUP BY prenom_joueur,nom_joueur
    ORDER BY 'Date de naissance'
    Avec ce code là, la requête m'affiche les 4 lignes concernées par le WHERE mais ne m'affiche donc pas la valeur la plus basse. Cependant, si je mets le code suivant, la requête m'affiche bien une seule valeur avec la date la plus basse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT min(date_naissance_joueur) 'Date de naissance'
    FROM joueurs
    WHERE id_equipe_joueur IN (SELECT id_equipe FROM equipes WHERE id_tournoi_equipe = 2)
    Ma question est : Comment ajouter le nom et le prénom du joueur en ayant une seule ligne à la fin ? (sans utiliser de LIMIT sinon c'est de la triche ^^)

    Merci d'avance !

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    La première requête affiche la date de naissance du plus agé des homonymes parmi les joueurs des équipes sélectionnées.
    Est-ce bien ce qui est attendu ?
    Pour afficher le nom et le prénom du joueur le plus agé dans ces équipes (ce qui semble être le but ), il faut passer par une sous-requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    SELECT  prenom_joueur           'Prenom'
        ,   nom_joueur              'Nom'
        ,   date_naissance_joueur   'Date de naissance'
    FROM    joueurs
    WHERE   id_equipe_joueur 
            IN  (   SELECT  id_equipe 
                    FROM    equipes 
                    WHERE   id_tournoi_equipe = 2
                )
        AND date_naissance_joueur
            =   (   SELECT  min(date_naissance_joueur)
                    FROM    joueurs
                    WHERE   id_equipe_joueur 
                            IN  (   SELECT  id_equipe 
                                    FROM    equipes 
                                    WHERE   id_tournoi_equipe = 2
                                )
                )
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 90
    Points : 36
    Points
    36
    Par défaut
    Ca marche extrêmement bien !
    J'avais inversé, il me fallait le plus jeune donc j'ai mis max à la place du min ^^
    Et j'ai fait le test dans le cas où deux joueurs ont la même date de naissance et les deux apparaissent donc c'est totalement nickel !
    Après relecture du code c'était pas compliqué ^^

    Merci beaucoup !

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Si ton SGBD prend en charge les CTE et les fonctions de regroupement fenêtrées, tu peux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    WITH    tmp
    AS  (   SELECT  prenom_joueur
                ,   nom_joueur
                ,   date_naissance_joueur
                ,   MAX(date_naissance_joueur)  over () date_maxi
            FROM    joueurs jou
            WHERE   EXISTS
                    (   SELECT  NULL
                        FROM    equipes     equ
                        WHERE   equ.id_tournoi_equipe   = 2
                            AND equ.id_equipe           = jou.id_equipe_joueur 
                    )
        )   
    SELECT  prenom_joueur           'Prenom'
        ,   nom_joueur              'Nom'
        ,   date_naissance_joueur   'Date de naissance'
    FROM    tmp
    WHERE   date_naissance_joueur   = date_maxi
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 90
    Points : 36
    Points
    36
    Par défaut
    Je ne connais pas trop cette manière mais je vais la tester et me renseigner.
    Merci beaucoup

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

Discussions similaires

  1. Problème avec la date dans un userform
    Par Gige91 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 13/01/2015, 11h25
  2. Problème avec condition WHERE dans commande SELECT
    Par Badouba76 dans le forum Objective-C
    Réponses: 3
    Dernier message: 08/11/2013, 18h19
  3. problème avec la date dans le flux rss
    Par victoires dans le forum Langage
    Réponses: 1
    Dernier message: 26/01/2012, 18h12
  4. Problème avec paramètre date dans Crystal Report
    Par callo dans le forum Windows Forms
    Réponses: 3
    Dernier message: 09/10/2008, 18h44
  5. probléme avec une date/string dans un CommandText
    Par critok dans le forum Bases de données
    Réponses: 5
    Dernier message: 09/02/2005, 15h30

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