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 :

HAVING MAX, sélection du statut correspondant à la plus grande date


Sujet :

Langage SQL

  1. #1
    Membre actif Avatar de schwarzy2
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2006
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 464
    Points : 288
    Points
    288
    Par défaut HAVING MAX, sélection du statut correspondant à la plus grande date
    Bonjour à tous,

    je veux sélectionner le statut par candidat correspondant à la plus grande date de mon jeu d'enregistrements.
    Ainsi j'ai le candidat 172 avec 3 enregistrements:
    num - statut - date
    11637 - 8 - 20080205
    23657 - 9 - 20081030
    26580 - 7 - 20080428

    Je veux récupérer pour ce candidat le statut 9, j'y arrive aujourd'hui en effectuant plusieurs tables temporaires successives: sélection pour chaque candidat de la plus grande date, puis récupération du statut par lien avec la table initiale sur le num_candidat et sur la date.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE TEMPORARY TABLE temp_date_seul AS SELECT num_candidat,MAX(date) as date_max FROM temp_statut GROUP BY num_candidat
     
    CREATE TEMPORARY TABLE temp_statut2 AS SELECT ts.num_candidat,ts.statut FROM temp_date_seul tds INNER JOIN temp_statut ts ON ts.num_candidat = tds.num_candidat AND ts.date=tds.date_max GROUP BY num_candidat
    Je voulais simplifier et effectuer cette sélection dans une seule requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT num_candidat, statut
    FROM temp_statut
    GROUP BY num_candidat
    HAVING MAX( date )
    Mais cette requête me retourne le statut 8 associé au candidat 172. Quelqu'un sait-il s'il y a un moyen de tout faire en une seule requête?

    Merci d'avance pour votre aide
    Feel good, feel geek

  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 : 60
    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 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Avec une sous-requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT num_candidat, statut
    FROM temp_statut t
    INNER JOIN (
      SELECT num_candidat, MAX(date) AS DateMax
      GROUP BY num_candidat
    ) temp ON t.num_candidat = temp.num_candidat
    WHERE t.date = temp.MaxDate
    Au passage, je signale que cest une mauvaise idée de nommer une colonne 'date' car c'est un mot du langage SQL.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre actif Avatar de schwarzy2
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2006
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 464
    Points : 288
    Points
    288
    Par défaut
    Super! ça marche, merci!

    petite précision si quelq'un d'autre veut se servir de ce code, il faut préciser la table dans la sous requête, ce qui nous donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT t.num_candidat, t.statut
    FROM temp_statut t
    INNER JOIN 
    (
      SELECT num_candidat, MAX(date) AS DateMax FROM temp_statut
      GROUP BY num_candidat
    ) temp ON t.num_candidat = temp.num_candidat
    WHERE t.date = temp.DateMax
    Feel good, feel geek

  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 : 60
    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 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par schwarzy2 Voir le message
    il faut préciser la table dans la sous requête
    Oups ! Evidemment !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/03/2014, 14h11
  2. selection par la plus grande date d'une année
    Par Chicna dans le forum Langage SQL
    Réponses: 8
    Dernier message: 21/02/2007, 13h47
  3. Réponses: 2
    Dernier message: 20/02/2007, 10h29
  4. Requête qui va chercher la plus grande date
    Par charleshbo dans le forum Access
    Réponses: 3
    Dernier message: 03/05/2006, 14h43
  5. [SQL SERVER 2000] 2 plus grandes dates
    Par Franck2mars dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/04/2006, 10h17

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