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

Requêtes MySQL Discussion :

Problème de requête


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 108
    Points : 55
    Points
    55
    Par défaut Problème de requête
    Bonjour,

    J'ai un problème concernant le resultat d'une de mes requêtes SQL, je voudrais faire un order by à l'interieur de chaque groupby, voila en image ce que j'obtiens sans group by:



    Avec un groupe by, j'obtiens les lignes en rouge, alors que je souhaitais avoir les lignes en vert (date la plus recente):



    Pouvez vous m'aider svp

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 040
    Points : 23 795
    Points
    23 795
    Par défaut
    Bonjour,

    MySQL ne devrait vraiment pas autoriser une telle largesse sur le GROUP BY. Cette syntaxe n'est pas conforme au SQL standard.
    Ce qui se passe, c'est qu'il prend une ligne "au hasard" par disque. Je dis "au hasard", mais en réalité, je ne sais pas trop comment elle est choisie, cette ligne... Il y a peut-être une logique, ou peut-être pas, toujours est-il qu'on n'a pas forcément à le savoir et que ça ne devrait pas être permis...

    Bref, la question est : quelles informations souhaites-tu ? Veux-tu toutes les données de la ligne la plus récente pour chaque disque ?

    Si oui, quelle est ta version de MySQL ? Parce qu'il va falloir passer par des sous-requêtes (ou à défaut par des tables temporaires)...
    Pour ça, regarde l'exemple donnée dans les sources MySQL.

    ced

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 108
    Points : 55
    Points
    55
    Par défaut
    Merci pour votre réponse,

    je souhaite avoir la ligne la plus recente pour chaque unité

    ma version de MySql est 4.1.9-max

  4. #4
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Citation Envoyé par adrix26 Voir le message
    je souhaite avoir la ligne la plus recente pour chaque unité
    ma version de MySql est 4.1.9-max
    Saluton,
    Ça tombe bien, les sous-requêtes sont supportées à partir de la version 4.1 de MySQL.
    Est-ce que le résultat de cette requête convient ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT d.id, d.serveurid, d.`date`, d.unité FROM disque d
    WHERE d.serveurid=541
    AND d.unité=(SELECT d1.unité FROM disque d1
                      WHERE d1.id=d.id 
                       AND d1.serveurid=d.serveurid 
                       AND d1.`date`=MAX(date))
    ORDER BY  d.unité, d.`date`

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 108
    Points : 55
    Points
    55
    Par défaut
    Merci pour votre réponse, mais l'execteur de requête me retourne une erreur "invalid use of group function".
    Voici ma requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT * FROM disque d
    WHERE d.serveurid=541
    AND d.unite=(SELECT d1.unite FROM disque d1
                      WHERE d1.id=d.id
                       AND d1.serveurid=d.serveurid
                       AND d1.date=MAX(date))
    ORDER BY  d.unite, d.date

  6. #6
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    C'est ma faute, je pense que MAX(d1.date) devrait règler le problème à moins qu'il faille faire une sous-sous_requête.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 108
    Points : 55
    Points
    55
    Par défaut
    meme avec "MAX(d1.date)" j'ai la meme erreur

  8. #8
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Bon, je m'aperçois que la corrélation de la sous-requête sur l'id est une énorme ânerie (si, si, j'insiste).
    Mais du coup, je suis un poil paumé dans ma requête.
    Faut que j'y réfléchisse.

  9. #9
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Désolé, je dois être trop fatigué, c'était pourtant simple, limite enfantin.
    En plus, on a déjà vu ce genre de requête un nombre incalculable de fois.
    J'ai resaisi les 24 lignes données en exemple, créer un base d'essai, une table disque, charger les valeurs et là, la requête m'est venue spontanément:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT d.id, d.serveurid, d.`date`, d.unité
    FROM `disque` d
    WHERE d.serveurid=541
    AND `id` = ( SELECT d1.`id`
                         FROM disque d1
                         WHERE d1.serveurid = d.serveurid
                         AND d1.unite = d.unite
                         ORDER BY d1.date DESC
                         LIMIT 1 )

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 108
    Points : 55
    Points
    55
    Par défaut
    Je vous remercie, c'est exactement ça!

  11. #11
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Nedankinde.

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

Discussions similaires

  1. Réponses: 19
    Dernier message: 27/08/2003, 16h32
  2. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 11h33
  3. Problème de requètes concurentes
    Par Emmanuel.G dans le forum XMLRAD
    Réponses: 3
    Dernier message: 08/08/2003, 17h51
  4. Réponses: 2
    Dernier message: 16/07/2003, 15h40
  5. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 19h02

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