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 :

Ligne sélectionnée par GROUP BY


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2014
    Messages : 33
    Points : 26
    Points
    26
    Par défaut Ligne sélectionnée par GROUP BY
    Bonjour,

    Je vous expose mon problème :

    Je dispose d'une table 'conversation' avec les champs suivant (id INT, date_create DATETIME)
    et je dispose d'une autre table 'inbox' avec les champs suivant (id INT, id_conversation, message TEXT, date_creation)

    -------TABLES----------------
    conversation(id, date_creation)
    inbox(id, #id_conversation, message TEXT, date_creation DATETIME)
    -------------------------------
    Je voudrais récupérer pour chaque conversation le dernier inbox en date.
    Je fais alors la requête suivante (MySQL):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT *, MAX(i.date_creation) AS date_dernier_message
    FROM conversation c
    JOIN inbox i ON c.id = i.id_conversation
    GROUP BY c.id
    HAVING date_dernier_message = i.date_creation

    Mon problème est qu'il n'y a pas de correspondance entre le MAX et le bon inbox.
    Est il possible de faire ça directement (1 seule requête) et donc d'améliorer ma requête ou faut-il passer par des sous requêtes.

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    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 102
    Points : 28 392
    Points
    28 392
    Par défaut
    Tout SGBD respectant correctement la syntaxe du langage SQL refuserait cette requête...
    MySQL l'accepte... mais affiche n'importe quoi.

    L'une des réponses à un problème de ce type est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT  * 
    FROM    conversation c
        JOIN 
            inbox   i 
            ON  c.id = i.id_conversation
    WHERE   EXISTS
            (   SELECT  1
                FROM    inbox   tmp
                WHERE   i.id_conversation   = tmp.id_conversation
                HAVING  i.date_creation     = MAX(tmp.date_creation)
            )
    ;

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2014
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Merci ça fonction parfaitement.

    Maintenant je vais étudier cette requête.

    Ce problème fait il partie de problème courant en SQL?

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 874
    Points : 53 048
    Points
    53 048
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Ali Kent Voir le message
    Merci ça fonction parfaitement.

    Maintenant je vais étudier cette requête.

    Ce problème fait il partie de problème courant en SQL?
    Non, c'est spécifique à merdeSQL (pardon "mySQMerde"). C'est un pseudo SGGD même pas relationnel qui est farci de bogues et d'approximations plus débiles les unes que les autres !
    A me lire :
    http://blog.developpez.com/sqlpro/p9...oudre_aux_yeux


    A +

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2014
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    OK merci pour l'info.
    Après lecture de l'article je pense que je ne travaillerai plus avec MySQL.

  6. #6
    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
    À propos, SQLPro, appelles-tu Maria DB "Merdia DB" ou as-tu constaté des améliorations dans le fork Maria DB par rapport à MySQL ?

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 874
    Points : 53 048
    Points
    53 048
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    À propos, SQLPro, appelles-tu Maria DB "Merdia DB" ou as-tu constaté des améliorations dans le fork Maria DB par rapport à MySQL ?
    Apparemment le moteur SQL n'est pas changé, c'est juste le moteur de stockage qui est différent. Donc, la plupart des merdouilles persistent.

    Bref, je note pour l'avenir merdia DB !!! ;-)

    A +

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

Discussions similaires

  1. [XL-2007] Suivi d'effectif - suppressions de lignes sélectionnées par macro VBA
    Par mich2p1 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/06/2014, 20h00
  2. avoir une ligne sélectionné par défaut dans un jtable
    Par minanoun dans le forum Composants
    Réponses: 4
    Dernier message: 12/04/2009, 19h15
  3. Réponses: 6
    Dernier message: 10/04/2007, 15h14
  4. GROUP BY, critère sur la ligne sélectionnée
    Par jeremya dans le forum Langage SQL
    Réponses: 1
    Dernier message: 18/04/2006, 16h13
  5. Compter nombre lignes générées par GROUP BY
    Par Trunks dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/03/2006, 16h52

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