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 :

Requête avec MAX et GROUP BY (2)


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 56
    Points : 42
    Points
    42
    Par défaut Requête avec MAX et GROUP BY (2)
    Bonjour.
    Mon problème rejoint ce qui était posé dans la discussion Requête avec MAX et GROUP BY, mais j'ai des difficultés à l'adapter à mon cas surtout que lui utilise une seule table.

    J’ai les relations suivantes :
    PRODUIT (NumPro, LibellePro)
    FOURNISSEUR (NumFour, RaisonSocial)
    DATE_MODIFICATION (datModif)
    FIXER_PRIX (#NumPro, # NumFour, # datModif, PrixFour)


    Cela me permet d’enregistrer dans ma base le prix des produits de chaque fournisseur au fur et à mesure que ça change. La rubrique datModif (date de modification) est de type DATE.
    J’ai voulu créer une requête qui affiche le dernier prix fixé par produit et par fournisseur.
    Mon SQL ci-dessous affiche les prix par produit et par fournisseur pour toutes les dates de modification alors que je veux la date de la dernière modification.

    SELECT FOURNISSEUR. RaisonSocial, FIXER_PRIX.NumPro, FIXER_PRIX.NumFour, FIXER_PRIX.PrixFour, FIXER_PRIX. datModif
    FROM FOURNISSEUR INNER JOIN FIXER_PRIX ON FOURNISSEUR.NumFour = FIXER_PRIX.NumFour;


    Mon problème est comment imposer que c’est la date la plus récente de modification de prix qu’il faut afficher.

    Vous pouvez voir le MCD en pièce jointe.
    Images attachées Images attachées  

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 902
    Points : 51 646
    Points
    51 646
    Billets dans le blog
    6
    Par défaut
    Quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT F.RaisonSocial, FP.NumPro, 
           FP.NumFour, FP.PrixFour, 
           FP.datModif
    FROM   FOURNISSEUR AS F
           INNER JOIN FIXER_PRIX AS FP
                 ON F.NumFour = FP.NumFour
    WHERE  FP.datModif = (SELECT MAX(FP.datModif)
                          FROM   FOURNISSEUR AS F2
                                 INNER JOIN FIXER_PRIX AS FP2
                                       ON F2.NumFour = FP2.NumFour 
                          WHERE  F2.NumFour = F.NumFour
                            AND  F2.NumPro = F.NumPro )
    A +

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 56
    Points : 42
    Points
    42
    Par défaut
    Merci infiniment SQLpro, cela fonctionne à merveille après deux petites modifications:
    - Au niveau de la 7è ligne c'est MAX(FP2.datModif) au lieu de MAX(FP.datModif), le 2 s'ajoute
    - A la dernière ligne c'est FP2.NumPro=FP.NumPro au lieu de F2.NumPro=F.NumPro, le P s'ajoute

    On a en conclusion:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT F.RaisonSocial, FP.NumPro, 
    FP.NumFour, FP.PrixFour, 
    FP.datModif
    FROM FOURNISSEUR AS F
    INNER JOIN FIXER_PRIX AS FP
    ON F.NumFour = FP.NumFour
    WHERE FP.datModif = (SELECT MAX(FP2.datModif)
    FROM FOURNISSEUR AS F2
    INNER JOIN FIXER_PRIX AS FP2
    ON F2.NumFour = FP2.NumFour 
    WHERE F2.NumFour = F.NumFour
    AND FP2.NumPro = FP.NumPro );
    Encore une fois MERCI.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/03/2014, 11h18
  2. Requête avec max(), group by et having. je m'y perds
    Par hispanus dans le forum SQLite
    Réponses: 3
    Dernier message: 11/02/2010, 15h29
  3. requête avec MAX et GROUP BY
    Par arcane dans le forum Langage SQL
    Réponses: 8
    Dernier message: 30/01/2008, 13h21
  4. [SQL Server] Requete avec MAX et group by
    Par joKED dans le forum Langage SQL
    Réponses: 1
    Dernier message: 05/01/2007, 13h00
  5. Requete avec max et group by
    Par Maxime555 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/07/2006, 11h48

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