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 pour trouver les MAX


Sujet :

Requêtes MySQL

  1. #1
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Points : 233
    Points
    233
    Par défaut Problème pour trouver les MAX
    Bonjour,

    J'ai une liste d'acquisiteur qui émettrent des valeurs à différentes dates. À partir de cette table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    AcquisitorID DateInscription        Valeur
        1        2006-04-12 22:00:00     97.00
        1        2006-04-16 22:00:00     50.00
        1        2006-04-20 22:22:00     44.83
        1        2006-04-24 22:06:00     34.12
        2        2006-04-10 07:00:00     50.00
        2        2006-04-11 07:00:00     50.00
        2        2006-04-12 07:00:00     50.00
        2        2006-04-13 06:00:00     50.00
        2        2006-04-14 07:10:00     49.00
        2        2006-04-15 07:02:00     49.00
        2        2006-04-16 07:20:00     48.10
        3        2006-04-20 00:00:00     46.25
        3        2006-04-20 04:00:00     26.40
        3        2006-04-24 02:00:00     44.10
        3        2006-04-26 00:00:00    250.00
        3        2006-04-28 04:00:00    246.25
        4        2006-04-20 00:00:00     40.00
        4        2006-04-22 00:00:00     38.00
        4        2006-04-24 00:00:00     37.50
        4        2006-04-26 00:00:00     33.20
        4        2006-04-27 00:00:00     33.00
        4        2006-04-29 00:00:00     19.40
    La clé primaire de cette table est composé des champs suivants (AcquisitorID, DateInscription):

    Actuellement je désire obtenir la ligne contenant la plus récente date de chacun des acquisiteurs. Donc je devrais obtenir le résutat suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    AcquisitorID DateInscription        Valeur
        1        2006-04-24 22:06:00     34.12
        2        2006-04-16 07:20:00     48.10
        3        2006-04-28 04:00:00    246.25
        4        2006-04-29 00:00:00     19.40
    Voilà ce que j'ai utilisé jusqu'ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT AcquisitorID, MAX(DateInscription), Valeur
    FROM ListeValeurs
    GROUP BY AcquisitorID
    Mais la date retournée n'est pas la pus récente.
    Quelqu'un pourrait m'éclairer sur le problème ?

    Merci à tous.

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Salut !

    Le problème vient du fait que tu ne peux pas grouper par Valeur... et que tu ne peux pas non plus spécifier comment choisir la Valeur...

    essaye ceci :
    (MySQL >= 4.1 requis)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT LV.AcquisitorID, LV.DateInscription, LV.Valeur
    FROM ListeValeurs AS LV
    WHERE LV.DateInscription = (
    <div style="margin-left:40px">SELECT MAX(TMP.DateInscription)
    FROM ListeValeurs AS TMP
    WHERE TMP.AcquisitorID = LV.AcquisitorID</div>)
    GROUP BY LV.AcquisitorID
    ou ceci (pour MySQL < 4.1 également)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT MAX(DateInscription), AcquisitorID
    FROM ListeValeurs
    GROUP BY AcquisitorID
    puis pour chaque AcquisitorID ($date contient la valeur de MAX(DateInscription) et $id celle de AcquisitorID :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT AcquisitorID, DateInscription, Valeur
    FROM ListeValeurs
    WHERE AcquisitorID = $id AND DateInscription = $date

  3. #3
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    D'abord, on ne dit pas "acquisiteur" mais "acquéreur".

    Ensuite, ton problème est un problème récurrent traité ici:
    http://pcaboche.developpez.com/artic...eure/?page=2_2

  4. #4
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Points : 233
    Points
    233
    Par défaut
    Merci beaucoup pour ton aide Swoög.

    Citation Envoyé par pcaboche
    D'abord, on ne dit pas "acquisiteur" mais "acquéreur".
    Ensuite, ton problème est un problème récurrent traité ici:
    http://pcaboche.developpez.com/artic...eure/?page=2_2
    Je développe toujours en ANGLAIS car ce sont les normes à suivre dans la compangie pour laquelle je travail. En anglais un acquéreur c'est un DATA ACQUISITOR. Et je n'avais pas inscrit acquisitEUR mais acquisitOR, je ne voyais pas vraiment l'intérêt de tout traduire mon code quand c'est évident comme dans le cas présent

    Merci à vous deux, je vais essayé ta solution Swoög et je vais aller lire ta documentation pcaboche

  5. #5
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Je n'ai pas trouvé le mot "acquisitor" dans mon dictionnaire. J'ai trouvé le mot "acquirer" à la place, qui me semble plus logique.

    Ca me faisait penser au mot "inquisiteur", qui n'a pas tout à fait le même sens...

  6. #6
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Points : 233
    Points
    233
    Par défaut
    Citation Envoyé par pcaboche
    Je n'ai pas trouvé le mot "acquisitor" dans mon dictionnaire. J'ai trouvé le mot "acquirer" à la place, qui me semble plus logique.

    Ca me faisait penser au mot "inquisiteur", qui n'a pas tout à fait le même sens...
    Oh j'étais dans l'ereur alors ?
    Je m'en excuse et merci pour la leçon d'anglais.

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

Discussions similaires

  1. [Slider] Problème pour fixer les valeurs max et min
    Par al2000 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 31/10/2013, 16h04
  2. Problème pour trouver les données commune dans une requête
    Par Winterrage dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/02/2008, 11h14
  3. problème d'algorithme pour trouver les circuit d'un graphe
    Par marc_dd dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 21/08/2006, 17h36
  4. Réponses: 3
    Dernier message: 24/11/2005, 10h44
  5. Réponses: 1
    Dernier message: 17/05/2004, 12h29

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