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 :

Selectionner des donnees selon la date


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2013
    Messages : 61
    Points : 52
    Points
    52
    Par défaut Selectionner des donnees selon la date
    Bonjour,

    Je cherche a lier les tables PRIX et PRODUITS ci-dessous pour en faire qu'une seule table avec l'ID, la valeur, la date, le nom et le type mais en ne prenant que la plus recente date. Resultat final devrait ressembler a la table ci dessous:

    Pouvez vous m'aider ? Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select p.ID, c.VALEUR, c.DATE, p.NOM, p.TYPE from PRODUIT p
    join PRIX c using (ID);
    PRIX :
    ID VALEUR DATE NOM TYPE
    1 2.10 2016-12-22 Fraise Fruit
    2 1.80 2016-12-17 Abricot Fruit


    PRIX :
    ID VALEUR DATE
    1 2.05 2016-12-20
    1 2.15 2016-12-21
    1 2.10 2016-12-22
    2 1.25 2016-12-15
    2 1.80 2016-12-17


    PRODUITS :
    ID NOM TYPE
    1 Fraise Fruit
    2 Pomme Fruit
    3 Abricot Fruit

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Quelque chose comme cela.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select p.ID, px.VALEUR, px.DATE, p.NOM, p.TYPE 
    from PRODUIT p
    inner join 
    (
    select Px1.Id, max(PX1.Date) as maxDate from Prix Px1
    group by Px1
    ) as pmd
    on p.Id=Pmd.Id
    inner join Prix Px on
    Px.Id=pmd.Id
    and Px.Date=pmd.maxDate
    mais attention si tu as 1 produit qui a deux prix à la même date, tu auras deux lignes.

    Il y a aussi des solutions avec les fonctions de fenétrage mais tu n'indiques pas ton SGBD, donc je ne sais pas s'il les supporte.
    Cordialement
    soazig

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2013
    Messages : 61
    Points : 52
    Points
    52
    Par défaut
    Oups pardon, j'utilis MySQL

    Merci pour ta reponse je vais essayer cela.

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 561
    Points
    38 561
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Avec MySQL, pas de fonction de fenêtrage possible
    Vous pouvez donc utiliser la solution proposée par Soazig, ou bien utiliser NOT EXISTS pour vérifier qu'il n'existe pas de prix plus récent pour le produit
    Cette deuxième solution sera probablement plus performante car elle évite de construire la table dérivée, économise un GROUP BY, et ne transporte aucune donnée

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2013
    Messages : 61
    Points : 52
    Points
    52
    Par défaut
    Merci a vous deux pour vos reponses ! Cela fonctionne parfaitement

  6. #6
    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
    Sous MySQL (et uniquement MySQL) cette requête-là doit fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select prd.id, pmd.valeur, pmd.date, prd.nom, prd.type 
      from produit as prd
      join ( select id, valeur, max(date) as date
               from prix
           group by id) as pmd on pmd.id = prd.id;

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

Discussions similaires

  1. [XL-2003] VBA supprimer des ligne selon la date d'une cellule
    Par Scrabblouille dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/08/2009, 22h37
  2. Suppression des valeurs selon la date
    Par nefertari dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 08/01/2008, 10h26
  3. selectionner des donnees sur 3 tables
    Par DI_2007 dans le forum 4D
    Réponses: 5
    Dernier message: 05/09/2007, 15h44
  4. Grouper des données selon une date
    Par gids01 dans le forum iReport
    Réponses: 2
    Dernier message: 30/07/2007, 16h03
  5. Boucle en Dos pour lister des fichiers selon une date
    Par Corben dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 17/12/2005, 12h17

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