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 sql, trouver une date


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2012
    Messages : 28
    Points : 40
    Points
    40
    Par défaut Requête sql, trouver une date
    Bonjour à tous et à toutes!

    J'ai une question à soumettre à l'assemblé :
    Le contexte : SQL Server 2008

    Je dispose de deux tables :

    Une table commande qui contient :

    -id article -date commande- prix
    LEGUME 01/01/2012 10
    LEGUME 01/06/2011 10
    LEGUME 01/01/2012 10
    LEGUME 01/01/2012 10
    LEGUME 01/06/2010 10
    LEGUME 01/06/2009 10

    Une table historique des coûts articles qui contient :

    -id article-date Depart cout- cout
    LEGUME 01/01/2012 1,15
    LEGUME 01/01/2011 1,10
    LEGUME 01/01/2010 1,05
    LEGUME 01/01/2009 0,99

    Ce que je souhaite c'est trouver pour chaque commande le cout associé (en fonction de la date donc.)

    Le résultat que je souhaiterais obtenir est le suivant :
    -id article -date commande- prix - cout
    LEGUME 01/01/2012 10 1,15
    LEGUME 01/06/2011 10 1,10
    LEGUME 01/04/2011 10 1,10
    LEGUME 01/09/2010 10 1,05
    LEGUME 01/06/2010 10 1,05
    LEGUME 01/06/2009 10 0,99

    Je sèche un peu
    Si vous avez des idées, n'hésitez pas!

  2. #2
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Bonjour,

    Tu dois utiliser des jointures.
    ~ Lola ~

  3. #3
    Membre du Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2012
    Messages : 28
    Points : 40
    Points
    40
    Par défaut
    Merci, mais ça je sais.
    La seule condition de jointure est sur Id article.
    J'ai environ 13,000 lignes dans ma tables commande.
    Environ 3,000 dans la table d'historique, avec 800 articles référencés.

    Si j'effectue une jointure toute bête, avec commande.id article = historique.id article, je vais me retrouver avec 45,000 lignes, ce n'est pas le but..

    J'arrive à spécifier que la date historique doit être inférieure a celle de commande.
    Ce que je veux c'est prendre LA date la plus proche dans le passé, et c'est la que je bloque

  4. #4
    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
    Pour ma part je créerai une vue pour créer des plages de dates, car c'est un besoin dont vous allez avoir probablement souvent besoin.

    Vos données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    CREATE TABLE dbo.Commande
    (
        Code_Article     varchar(10)
      , Date_Commande    date
      , Prix             decimal(5,2)
    )
     
    INSERT INTO dbo.Commande (Code_Article, Date_Commande, Prix)
    select 'LEGUME', convert(date, '01/01/2012', 103), 10 union all
    select 'LEGUME', convert(date, '01/06/2011', 103), 10 union all
    select 'LEGUME', convert(date, '01/01/2012', 103), 10 union all
    select 'LEGUME', convert(date, '01/01/2012', 103), 10 union all
    select 'LEGUME', convert(date, '01/06/2010', 103), 10 union all
    select 'LEGUME', convert(date, '01/06/2009', 103), 10 
     
    CREATE TABLE dbo.Article_Cout_Histo
    (
        Code_Article     varchar(10)
      , Date_Depart_Cout date
      , Cout             decimal(5,2)
    )
     
    INSERT INTO dbo.Article_Cout_Histo (Code_Article, Date_Depart_Cout, Cout)
    select 'LEGUME', convert(date, '01/01/2012', 103), 1.15 union all
    select 'LEGUME', convert(date, '01/01/2011', 103), 1.10 union all
    select 'LEGUME', convert(date, '01/01/2010', 103), 1.05 union all
    select 'LEGUME', convert(date, '01/01/2009', 103), 0.99
    La vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE VIEW dbo.v_Article_Cout_Histo (Code_Article, Date_Depart_Cout, Date_Fin_Cout, Cout)
    as
      select T1.Code_Article
           , T1.Date_Depart_Cout
           , coalesce(DATEADD(day, -1, MIN(T2.Date_Depart_Cout)), convert(date, '31/12/9999', 103))
           , T1.Cout
        from dbo.Article_Cout_Histo as T1
             left outer join dbo.Article_Cout_Histo as T2
               on T2.Code_Article     = T1.Code_Article
              and T2.Date_Depart_Cout > T1.Date_Depart_Cout
    group by T1.Code_Article
           , T1.Date_Depart_Cout
           , T1.Cout
    La requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    select CMD.Code_Article
         , CMD.Date_Commande
         , CMD.Prix
         , ACH.Cout
      from dbo.Commande as CMD
           INNER JOIN dbo.v_Article_Cout_Histo as ACH
             ON ACH.Code_Article = CMD.Code_Article
     where CMD.Date_Commande BETWEEN ACH.Date_Depart_Cout AND ACH.Date_Fin_Cout
     
     
    Code_Article Date_Commande Prix  Cout
    ------------ ------------- ----- ----
    LEGUME       2012-01-01    10.00 1.15
    LEGUME       2011-06-01    10.00 1.10
    LEGUME       2012-01-01    10.00 1.15
    LEGUME       2012-01-01    10.00 1.15
    LEGUME       2010-06-01    10.00 1.05
    LEGUME       2009-06-01    10.00 0.99

  5. #5
    Membre du Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2012
    Messages : 28
    Points : 40
    Points
    40
    Par défaut
    Merci

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/12/2012, 10h11
  2. Réponses: 1
    Dernier message: 03/04/2009, 10h09
  3. Une requête SQL sur 2 Dates
    Par souminet dans le forum Bases de données
    Réponses: 5
    Dernier message: 14/05/2008, 20h29
  4. Requête SQL sur une base Access, where sur un champ date
    Par digital prophecy dans le forum Bases de données
    Réponses: 1
    Dernier message: 09/05/2008, 16h47
  5. [CR ?] requête SQL sur une date
    Par czezko dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 23/04/2008, 10h25

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