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 :

[MYSQL] Requète au résultat inattendu


Sujet :

Langage SQL

  1. #1
    Candidat au titre de Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 31
    Points : 27
    Points
    27
    Par défaut [MYSQL] Requète au résultat inattendu
    Bonjour

    J'essaie de construire une requête afin d'obtenir la liste des devises (id) et leur taux de change pour la date la plus récente.

    Voici la table :
    On voit que la devise dont l'Id est 2 possède deux enregistrements, je ne veut que le plus récent pour chaque id.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    iddevise 	date_action 	taux_change 	idutilisateur 	commentaire
    1		12/01/2010 14:41	1	1		NULL
    2		12/01/2010 14:41	10	1		Test 1 dollar = 10 eruos
    2		12/01/2010 15:24	20	1		test 1 dollar = 20 euros
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT MAX(date_action), taux_change FROM taux_devises
    GROUP BY iddevise
    Cette requête me retourne ce résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MAX(date_action) 	taux_change
    2010-01-12 14:41:09 	1
    2010-01-12 15:24:49 	10
    Alors que j'attendais ce résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MAX(date_action) 	taux_change
    2010-01-12 14:41:09 	1
    2010-01-12 15:24:49 	20
    Comment obtenir ce résultat svp ?

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    D'abord identifier les couples (iddevise, date_action) qui vous intéresse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      SELECT iddevise, MAX(date_action)
        FROM taux_devises
    GROUP BY iddevise
    Puis joindre ce résultat à votre table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT td.*
      FROM taux_devises td
           INNER JOIN (  SELECT iddevise, MAX(date_action) as date_action_max
                           FROM taux_devises
                       GROUP BY iddevise) tmx
             ON tmx.iddevise = td.iddevise
            AND tmx.date_action_max = td.date_action

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 126
    Points : 93
    Points
    93
    Par défaut
    Selon moi, et je ne me prétend pas expert, le souci viendrait du fait que MAX() gère mal les dates.

    Essayes de voir dans les fonctions de manipulation de dates de ton SQBD si tu peux la transformer en un nombre.

  4. #4
    Candidat au titre de Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 31
    Points : 27
    Points
    27
    Par défaut
    Merci pour vos réponses.

    Je vais opter pour celle de Waldar qui me parait plus logique car je ne pense pas que le problème vienne de la fonction MAX qui me donne bien la date la plus grande (récente).

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Citation Envoyé par Ghurdyl Voir le message
    Selon moi, et je ne me prétend pas expert, le souci viendrait du fait que MAX() gère mal les dates.
    Ce qu'il faut pas lire quand même...

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

Discussions similaires

  1. MySQL : Affichage du résultat d'une requête dans un tableau
    Par mathieu dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 7
    Dernier message: 22/09/2017, 16h51
  2. [MySQL] Requête retournant résultat inattendu
    Par aiss57 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 04/03/2010, 12h35
  3. Réponses: 5
    Dernier message: 15/10/2008, 09h08
  4. [requête]donner résultat que si + de n lignes...
    Par Titia765 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 10/06/2003, 12h02
  5. Réponses: 4
    Dernier message: 28/09/2002, 00h00

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