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

Designer Discussion :

[vXIr2] valeur la plus récente d'une table


Sujet :

Designer

  1. #1
    Membre habitué Avatar de schkrumble
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 136
    Points : 130
    Points
    130
    Par défaut [vXIr2] valeur la plus récente d'une table
    Bonjour,

    Je bosse sur une base MySQL

    J'ai une table qui historise tous les prix de mes produits :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    IdProduit    DateValeur       Prix
        A          01/01/2010     15,50
        A          03/01/2010     15,90
        A          10/01/2010     15,00
        A          20/01/2010     14,90
        B          01/01/2010     30,50
        B          16/01/2010     31,50
        C          01/01/2010     80,00
        C          10/01/2010     75,00
        C          30/01/2010     76,00
    Je cherche à créer une table dérivée qui me ramène rait pour chaque produit le prix le plus récent enregistré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IdProduit    DateValeur       Prix
        A          20/01/2010     14,90
        B          16/01/2010     31,50
        C          30/01/2010     76,00
    Je ne trouve pas la syntaxe... si quelqu'un peut m'aider ...

  2. #2
    Membre habitué Avatar de schkrumble
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 136
    Points : 130
    Points
    130
    Par défaut
    bon j'ai fini par trouver qq chose qui marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT 
      DerMAJ.IdProduit,
      HistoPrix.DateValeur,
      HistoPrix.Prix
    FROM
      (HistoPrix INNER JOIN
        ( SELECT 
             HistoPrix.IdProduit,
             max(HistoPrix.IdHistoPrix) as IdHistoPrix
          FROM
              HistoPrix
          GROUP BY
              HistoPrix.IdProduit ) DerMAJ 
       ON (DerMAJ.IdHistoPrix=HistoPrix.IdHistoPrix) )
    • HistoPrix est la table où sont historisée les prix des produits
    • pour trouver le prix le plus récent, je ne me suis pas basé sur la Date de valeur , mais sur l'Id des lignes de la table HistoPrix (les mises à jour de prix sont enregistrées dans l'ordre)
    • DerMAJ est la façon dont j'ai nommé une table dérivée intermédiaire qui me ramène pour chaque IdProduit l'Id de la dernière ligne correspondante dans la table HistoPrix


    Si quelqu'un a une solution plus simple, je suis preneur, mais celle-ci fonctionne.

  3. #3
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    Je ne pense pas qu'il y ait de solution plus simple, j'étais entrain de regarder comment passer par les dates mais c'est exactement le même fonctionnement qu'avec les Id.
    Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
    Un message vous a aidé ? Votez en cliquant sur
    Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton

  4. #4
    Membre habitué Avatar de schkrumble
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 136
    Points : 130
    Points
    130
    Par défaut
    je n'arrivais pas à le faire via les dates, et j'ai toujours du mal à voir comment faire, car si je jointe sur les date je peux avoir des problèmes avec deux produits dont les prix ont été modifiés le même jour...

    Comment ferais-tu ?

    Pour le moment c'est juste de la curiosité intellectuelle...
    mais le jour où l'on m'annoncera que les règles de gestions sont modifiées et qu'un ancien prix peut être corrigé à postériori il faudra que je sache faire !

  5. #5
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    Tu peux y arriver de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT FINAL.IDPRODUIT, FINAL.DATEVALEUR, FINAL.PRIX
    FROM
    (SELECT IDPRODUIT, max(DATEVALEUR) AS DATETEMP
    FROM HISTOPRIX
    GROUP BY IDPRODUIT) BASE,
    HISTOPRIX FINAL
    WHERE BASE.IDPRODUIT = FINAL.IDPRODUIT AND BASE.DATETEMP = FINAL.DATEVALEUR
    Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
    Un message vous a aidé ? Votez en cliquant sur
    Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton

  6. #6
    Membre habitué Avatar de schkrumble
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 136
    Points : 130
    Points
    130
    Par défaut
    Bien joué, j'avais oublié qu'on pouvait faire une jointure sur plusieurs champs à la fois...

    HS:
    la syntaxe que tu propose avec des WHERE ne fonctionne hélas pas avec mon moteur MySQL, je dois la convertir en utilisant des JOIN / ON ce qui est des plus pénible... mais ce sera l'objet d'un autre sujet !

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

Discussions similaires

  1. Déterminer la Valeur la plus grande dans une table
    Par arnaud_verlaine dans le forum Langage SQL
    Réponses: 9
    Dernier message: 22/08/2014, 23h35
  2. [AC-2010] Supprimer la date la plus récente d'une table.
    Par CmsrFr dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 24/08/2012, 01h21
  3. Réponses: 5
    Dernier message: 10/11/2011, 08h58
  4. Réponses: 4
    Dernier message: 05/05/2011, 13h46
  5. Réponses: 3
    Dernier message: 25/07/2007, 17h28

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