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 :

select avec group by sur la date la plus recente


Sujet :

Requêtes MySQL

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    Par défaut select avec group by sur la date la plus recente
    Bonjour,

    voilà, dans ma table j'ai pour un même item plusieurs lignes (1 ligne pour chaque partenaire). Mais je peux aussi avoir deux lignes pour le meme item et le meme partenaire.
    soit le jeu de résultats suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    numPartenaire	numItemAVendre	enVente	dateCreation	dateTransmission	numMvt
    1 	856041 	2 	2010-07-13 16:53:33 	(NULL) 	14
    2 	856041 	2 	2010-07-13 16:53:33 	(NULL) 	15
    3 	856041 	2 	2010-07-13 16:53:33 	(NULL) 	16
    1 	905742 	0 	2010-07-13 12:20:00 	(NULL) 	10
    1 	905742 	2 	2010-07-13 14:00:00 	(NULL) 	7
    1 	905742 	0 	2010-07-13 15:00:00 	(NULL) 	13
    2 	905742 	0 	2010-07-13 12:10:00 	(NULL) 	11
    2 	905742 	2 	2010-07-13 13:00:00 	(NULL) 	8
    3 	905742 	0 	2010-07-13 12:00:00 	(NULL) 	12
    3 	905742 	2 	2010-07-13 12:15:00 	(NULL) 	9
    ce que je veux, c'est n'avoir qu'une seule ligne par numItemAVendre et numPartenaire , mais la ligne la plus récente.

    j'ai donc tenté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select *
     FROM partenairesMajStock group by numItemAVendre,numPartenaire HAVING (max(dateCreation))
    Seulement ça ne me donne pas la date la plus recente

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    numPartenaire	numItemAVendre	enVente	dateCreation	dateTransmission	numMvt
    1 	856041 	2 	2010-07-13 16:53:33 	(NULL) 	14
    2 	856041 	2 	2010-07-13 16:53:33 	(NULL) 	15
    3 	856041 	2 	2010-07-13 16:53:33 	(NULL) 	16
    1 	905742 	0 	2010-07-13 12:20:00 	(NULL) 	10
    2 	905742 	0 	2010-07-13 12:10:00 	(NULL) 	11
    3 	905742 	0 	2010-07-13 12:00:00 	(NULL) 	12
    Est ce quelqu'un a une idée ?
    Merci...

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    salut,

    déjà il faut récupérer la date maximale sur ce couple de valeur souhaitée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     SELECT numItemAVendre,numPartenaire, max(dateCreation)
    FROM partenairesMajStock 
    GROUP BY numItemAVendre,numPartenaire
    ensuite il te reste à faire une jointure pour récupérer l'ensemble des autres données

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    Par défaut
    Merci, mais la jointure est vraiment nécessaire ? n'y a t-il pas un autre moyen sans jointure ??

  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
    Saluton,
    Je ne sais pas si la jointure est indispensable mais le GROUP BY est, par définition, incapable d'assurer une continuité référentielle entre les colonnes.
    Donc, à tout le moins, il faut filtrer la requête de projection en insérant la requête de groupement dans la clause WHERE.
    La jointure me semble toutefois plus performante.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT pms.numItemAVendre,pms.numPartenaire,pms.dateCreation
    FROM partenairesMajStock pms
    INNER JOIN(SELECT numItemAVendre,numPartenaire, max(dateCreation) recent
    FROM partenairesMajStock 
    GROUP BY numItemAVendre,numPartenaire) gp 
    ON gp.numItemAVendre=pms.numItemAVendre
    AND gp.numPartenaire=pms.numPartenaire
    AND gp.recent=pms.dateCreation
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    Par défaut
    Merci,

    ça fonctionne et ce n'est pas très long... mais je pensais qu'on pouvait le faire sans jointure..

    merci à vous deux.

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

Discussions similaires

  1. Select avec "having max" sur chp date
    Par Adel_mana dans le forum Langage SQL
    Réponses: 5
    Dernier message: 14/08/2009, 12h01
  2. select sur une date de plus de x jour
    Par Zen_Fou dans le forum Requêtes
    Réponses: 4
    Dernier message: 03/04/2006, 17h14
  3. PB avec group by sur union
    Par panini182 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/07/2005, 17h58
  4. selection avec group by mais ne garder que ...
    Par Larson dans le forum Langage SQL
    Réponses: 13
    Dernier message: 22/06/2005, 17h23
  5. Réponses: 9
    Dernier message: 17/01/2004, 10h51

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