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 une seule ligne par groupe


Sujet :

Langage SQL

  1. #1
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut Récupérer une seule ligne par groupe
    Bonjour à tous et à toutes,

    J'aimerai savoir comment faire pour recuperer une seul ligne par groupe dans ma requete.

    En effet, imaginons la requete suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT V.libelle,
               V.date_creation,
               M.libelle
    FROM voitures V
    INNER JOIN marques M ON M.id = V.marque_id
    Cette requete me renverait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    cliot1  12/12/1996 renault
    cliot2  12/12/1999 renault
    cliot3  12/12/2006 renault
    cliot4  12/12/2010 renault
    C3      08/08/1994 citroen
    C4      08/08/1996 citroen
    C5      08/08/1998 citroen
    C6      08/08/2008 citroen

    J'aimerai que ma requete me renvoie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cliot4  12/12/2010 renault
    C6      08/08/2008 citroen
    Soit la voiture, par marque, la plus ressente.

    Qui aurait une idée?
    Ceci consisterai à faire un MAX sur date_creation!

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 383
    Points
    18 383
    Par défaut
    Quel est votre SGBD ?

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    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 099
    Points : 28 403
    Points
    28 403
    Par défaut
    Question maintes fois posée sur ce forum...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT  v.libelle
        ,   v.date_creation
        ,   m.libelle
    FROM    voitures    v
        INNER JOIN 
            marques     m           
            ON  m.id    = v.marque_id
    WHERE   EXISTS
            (   SELECT  1
                FROM    voitures    d
                WHERE   v.marque_id     = d.marque_id
                HAVING  v.date_creation = max(d.date_creation)
            )
    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.

  4. #4
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Merci de vos réponses, C'est exactement ce que je cherchais!

    PS: Mon SGBD est Mysql (je travail avec workbench)

  5. #5
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    J'ai une derniere question sur ce sujet.

    Est ce que j'aurai pu faire un group by sur la marque et faire un order by sur la date_creation? ceci me renverrait une seul ligne par groupe et cette ligne contiendrait la date la plus ressente!


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT V.libelle,
               V.date_creation,
               M.libelle
    FROM voitures V
    INNER JOIN marques M ON M.id = V.marque_id
    GROUP BY M.id
    ORDER BY V.date_creation DESC

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    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 099
    Points : 28 403
    Points
    28 403
    Par défaut
    Dans la norme du langage SQL, toutes les colonnes de la clause SELECT qui ne font pas l'objet d'une fonction de regroupement doivent être reprises dans la clause GROUP BY.
    Dans la requête que tu présentes, aucune des colonnes du GROUP BY n'est reprise dans le SELECT.

    Dans la majorité des SGBD, une telle requête aurait pour seul résultat un message d'erreur de syntaxe lors de son exécution.
    Avec MySql, pas d'erreur de syntaxe, mais une seule ligne par marque, avec un modèle et une date pris au hasard dans la table...
    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.

  7. #7
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Merci de cette réponse. Donc je garde en tête la première méthode qui fonctionne très bien!

  8. #8
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 949
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 949
    Points : 5 848
    Points
    5 848
    Par défaut
    A lire autour du sujet GROUP BY et MySql

  9. #9
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Merci pour la documentation

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

Discussions similaires

  1. Comment n'afficher qu'une seule ligne par sous-groupe
    Par mondaying dans le forum Langage SQL
    Réponses: 3
    Dernier message: 20/01/2010, 23h25
  2. Récupérer le contenu de colonnes en une seule ligne
    Par casavba dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 03/07/2008, 13h21
  3. [debutant]Récupération d'une seule ligne d'un groupe
    Par iza76 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 25/01/2008, 09h25
  4. Réponses: 7
    Dernier message: 08/03/2007, 13h05
  5. Réponses: 5
    Dernier message: 27/06/2006, 20h27

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