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 :

Trouver le dernier prix de vente d'un article avec un MAX


Sujet :

Langage SQL

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut Trouver le dernier prix de vente d'un article avec un MAX
    Bonjour,

    Je cherche à obtenir le dernier prix de vente d'un article
    j'ai une table DOC_LIGNES qui contient tous les articles vendus :
    référence, date, prix de vente ....
    exemple
    BAAR01 , 20100210, 150
    BAAR01 , 20100531, 900
    BAAR01 , 20101110, 250

    Après plusieurs essais, je suis arrivé à çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DISTINCT AR_Ref, MAX(DO_Date) AS Derniere_date, MAX(DL_PrixUnitaire) AS Dernier_PV
    FROM         F_DOCLIGNE
    GROUP BY AR_Ref
    Je pensais que c'était bon, mais j'ai découvert que non:
    j'obtiens :
    BAAR01, 20101110, 900

    Est-ce quelqu'un pourrait m'aider ? Je suppose que je place mal un MAX ?

    Merci

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Quel est votre SGBD ?

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut
    Pardon ! SQL 2008

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Essayez ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    With DocLigne (AR_Ref, DO_Date, DL_PrixUnitaire, RN) as
    (
    SELECT AR_Ref, DO_Date, DL_PrixUnitaire,
           row_number() over(partition by AR_Ref order by DO_Date desc)
      FROM F_DOCLIGNE
    )
    SELECT AR_Ref, DO_Date, DL_PrixUnitaire
      FROM DocLigne
     WHERE RN = 1;

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut
    Merci Waldar.

    J'obtiens la liste de mes articles avec un prix mais ce n'est pas le dernier saisi

    Pour m'en assurer, j'ai saisi 1 facture au 09/11/2010 avec un article BAAR01 à 197€.
    J'exécute la requête, c'est bon !

    Je saisi une nouvelle facture à la même date, même article mais à 342€
    la requête me retourne 197€


    J'ai trouvé un autre champ qui stocke le N° de ligne, j'ai donc adapté pour obtenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    WITH DocLigne (AR_Ref, DO_Date, DL_PrixUnitaire, cbMarq, RN) AS
    (
    SELECT AR_Ref, DO_Date, DL_PrixUnitaire, cbMarq,
           row_number() over(partition BY AR_Ref ORDER BY cbMarq DESC)
      FROM F_DOCLIGNE
    )
    SELECT AR_Ref, DO_Date, DL_PrixUnitaire, cbMarq
      FROM DocLigne
     WHERE RN = 1;

    Merci pour ton aide

    P.S. : le Row Number over (partition ....cela me dépasse

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Si la précision de la date se fait à la journée, effectivement on ne peut pas différencier deux prix saisis le même jour.
    Si vous avez un autre code qui permet cette différence pas de soucis !

    Au passage, votre colonne DO_Date devrait être un datetime, pas un int / varchar.

    Pour le row_number(), je vous renvoie sur l'article de SQLPro :
    http://sqlpro.developpez.com/article...clause-window/

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut
    Merci pour tout

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 29/11/2010, 22h05
  2. Trouver le dernier offset de son exe delphi
    Par Coussati dans le forum Delphi
    Réponses: 5
    Dernier message: 12/06/2006, 11h37
  3. Comment trouver la dernière date de modification d'un fichier
    Par je®ome dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 24/05/2006, 13h23
  4. [D7 & Excel]Peut-on trouver la derniere ligne du fichier
    Par Isa31 dans le forum API, COM et SDKs
    Réponses: 17
    Dernier message: 14/03/2006, 10h52
  5. Trouver le dernier enregistrement d'une table
    Par remi59 dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/03/2003, 14h54

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