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 :

Probleme de regroupement par GROUP BY en sélectionnant la valeur MAX d'un champ


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Par défaut Probleme de regroupement par GROUP BY en sélectionnant la valeur MAX d'un champ
    Bonjour à tous,
    Je dispose d'une table contenant les abonnements de chaque client. Chaque client dispose de plusieurs abonnements se succédant dans le temps. Je souhaiterai récupérer l'abonnement le plus récent de chaque client.

    J'exécute la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COD_CLIENT,NOM_CLIENT,COD_ABO,NB_PANIER,DAT_1_LIVR, MAX(DAT_FIN_LIVR) AS DAT_FIN_LIVR 
    FROM `t abonnement` 
    GROUP BY COD_CLIENT
    J'obtiens alors bien la date la plus récente (celle de la ligne orange sur l'image jointe), mais les autres champs récupérés ne sont pas ceux du même enregistrement mais ceux de la ligne en vert sur l'image jointe.
    Comment récupérer les autres champs de la même ligne que la date la plus récente?
    Merci de votre aide,
    Images attachées Images attachées  

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 19
    Par défaut
    Pour trouver la bonne ligne, il faut que tu trouves avant la date max => Select imbriqué.

    Essaye ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT t1.cod_client, t1.NOM_CLIENT, t1.COD_ABO, t1.NB_PANIER, t1.DAT_1_LIVR, t1.dat_fin_livr
    FROM t abonnement t1
    WHERE t1.dat_fin_livr = (SELECT MAX(t2.dat_fin_livr) FROM t_abonnement t2
                             WHERE t2.cod_client = t1.cod_client
                             GROUP BY t2.cod_client)

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Par défaut
    J'avais déjà essayé cette solution mais cette requête fait planter le serveur MySql. La page ne s'arrête pas de charger et on est obligé de redémarrer le serveur car après l'arrêt manuel du chargement de la page, plus aucune requête ne s'exécute (même un simple SELECT *)

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 19
    Par défaut
    Je suppose que tu es sur une base MySQL. Je ne suis pas spécialiste du SQL sur ce genre de base mais normalement la requête que tu as indiquée devrait planter.

    Ceci étant dit, elle a l'air de t'indiquer la date max que tu souhaites et les autres informations de la première ligne renvoyée. As-tu tenté de "feinter" en t'arrangeant pour que la première ligne soit celle que tu souhaites, c'est-à-dire en plaçant un ORDER BY COD_CLIENT, DAT_FIN_LIVR desc ?

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Par défaut
    Oui j'ai pensé à la même "feinte" , malheureusement ça ne fonctionne pas!
    En effet dans ma requête la date max est bien retournée mais les autres champs ne correspondent à l'enregistrement d'où la date max a été récupérée.

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    La requête de Kazzin est bonne est il ne faut pas essayer de feinter.
    Il vaut mieux indexer correctement la table pour améliorer grandement les performances et éviter le plantage du serveur.
    Quel volume de données à traiter ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

Discussions similaires

  1. [MySQL] ID par groupe ne contenant pas certaines valeurs
    Par omdafer dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 16/02/2015, 20h17
  2. [AC-2003] Sélectionner la valeur maxi d'un champ
    Par jeanpierre78 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 08/09/2012, 13h19
  3. regrouper par groupe de valeur
    Par papilou86 dans le forum IHM
    Réponses: 2
    Dernier message: 23/01/2008, 21h16
  4. Valeur Max d'un champ par défaut
    Par popoliline dans le forum Access
    Réponses: 2
    Dernier message: 01/09/2006, 18h30

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