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 :

Extraire un seul enregitrement par article


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 72
    Points : 46
    Points
    46
    Par défaut Extraire un seul enregitrement par article
    Bonjour,

    Je ne trouve pas la requete correspondante à mon probleme.

    Extraction du dernier prix d'achat par article dans un historique de commande :

    J'ai une table d'historique de commande comportant des articles achetés. J'ai donc potentiellement 0, 1 ou n lignes (articles prix, date, .. pour un même code article.

    Ma demande :

    Comment constituer ma requête pour avoir uniquement "1" seule ligne par article (critère de filtre : le prix le plus récent (date)) comportant tous les champs dans le select ???

    Pouvez vous m'aider ?

    Merci

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    As-tu fait un début de requête qu'on pourrait voir ?

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 72
    Points : 46
    Points
    46
    Par défaut
    Je souhaite récupérer ces infos sous cette forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    SELECT id_art, designation, prix_HT_Eur FROM matable
    WHERE ?????

    Si je fais cela s'obtient bien la dernière date date pour 1 article donné
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    SELECT id_art, max(date_crt) FROM matable GROUP BY id_art

    Mais je ne sais pas comment construire ma clause WHERE avec une double condition (numéro article et date) pointant sur le resultat ramener sur la 2eme requete qui constitue mon filtre.

    Table temporaire et jointure pour faire un filtre ou il y a beaucoupe plus simple ?????????

    Merci pour votre aide

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Normalement, dans une BDD correctement modélisée, ta table d'historique de commande ne devrait comporter que l'identifiant de l'article, pas sa désignation.
    Pour avoir la désignation, il faut faire une jointure avec la table des articles et passer par une sous-requête.
    Sans connaître la structure exacte de tes tables, procédons par étapes...

    La date du dernier prix hors taxes par article :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id_art, MAX(date_crt) AS DateMax
    FROM histoCde
    GROUP BY id_art

    Les infos de chaque article et le prix correspondant à la date :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT a.id_art, a.designation, h.prix_HT_Eur AS DernierPrix, h.date_crt AS DateDuDernierPrix
    FROM articles AS a
    INNER JOIN histo_cde AS h ON a.id_art = h.id_art
    INNER JOIN (
       SELECT id_art, MAX(date_crt) AS DateMax
       FROM histoCde
       GROUP BY id_art
    ) tmp ON h.id_art = tmp.id_art AND h.date_crt = tmp.DateMax
    ORDER BY a.id_art

    Il y a peut-être plus simple mais c'est la fin de la journée, je fatigue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/05/2007, 08h43
  2. Réponses: 2
    Dernier message: 04/07/2006, 02h32
  3. Réponses: 5
    Dernier message: 27/06/2006, 20h27
  4. [VB.NET]une seule instance par fenetre MDI
    Par pat59 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 20/02/2006, 11h14
  5. Réponses: 16
    Dernier message: 26/01/2006, 09h49

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