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 :

Calcul d'une date de rupture de stock en sql


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Calcul d'une date de rupture de stock en sql
    Bonsoir à tous

    Je cherche un mixte pro SQL et pro Maths

    Voici mon problème:

    J'ai un stock initial : 150000

    Puis j'ai des conso mensuelles :
    mois 1 : 50000
    mois 2 : 30000
    mois 3 : 20000
    mois 4 : 60000
    mois 5 : 50000
    mois 6 : 30000
    mois 7 : 50000
    mois 8 : 30000

    je dois calculer une date de ruptue de stock "exacte" (en respectant la chronologie date).

    Dans mon exemple j'ai une rupture le 4ème mois mais quand exactement !!!

    En vous remerciant d'avance pour vos idées

  2. #2
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonsoir et bienvenue,

    Malheureusement sans plus d'informations il sera difficile de vous aider.

    Auriez vous la description de vos tables, une requête ou un bout de requête ?

    Je vous invite à lire ceci afin de répondre au mieux à votre question.


  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    En fait j'ai deux tables


    le stock initial est calculé à partir de la table de stock t_stock
    T_STOCK(TS_PERIODE, TS_PRODUIT, TS_QTE,TS_MONTANT)

    on prend le stck initial au 30/09/2008 : 150000

    Les stocks objectifs consommés mensuellement
    T_STOCK_OBJECTIF(TSO_MOIS,TSO_MONTANT)

    Puis on se base sur les 12 mois glissants existants dans T_Stock_objectif pour notre calcul

  4. #4
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Le soucis c'est votre question
    mais quand exactement !!!
    D'après ce que vous donnez comme informations cela restera au niveau du mois !

    Avez vous une colonne de type DATE ?
    on prend le stock initial au 30/09/2008 : 150000
    Quelle colonne correspond au 30/09/2008 ?


  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    dans ma table t_stock j'ai en fait le champs TS_PERIODE qui correspond à mon état de sock au dernier jour du mois.

    idem pour ma table T_STOCK_OBJECTIF le champs TSO_MOIS correspond au dernier jour du mois.

    En fait quand je dis exactement c'est que je pensais qu'une fois dectecter mon mois de rupture (dans l'exemple le 4eme mois) prendre le total objectif de ce mois et le repertir sur 30 jours pour avoir une date précise

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    bonjour

    Est-ce que qq'un est inspiré par mon problème ?

  7. #7
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour,

    Je ne trouve pas votre point de vue très exhaustif...

    Il faudrait un paramètre concernant le nombre de jour par mois déjà ou une table.

    De plus votre idée de répartir le total_objectif sur le nombre de jour
    Vous travaillez le samedi et le dimanche ?
    Est-ce en jours ouvrés ou ouvrables ?
    Cela correspond t-il à la réalité (Répartition équivalente) ?

    Je crois surtout qu'il faudrait revoir la conception !


  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Malheureusement la base est ainsi faite ... je ne peux que m'y astreindre..

    En ce qui concerne le nombre de jour ouvrés = 6

    en faite on à plus de ventes le samedi

    mais on approche quand meme plus d'une date précise de rutpure que sur le mois

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 879
    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 879
    Points : 53 057
    Points
    53 057
    Billets dans le blog
    6
    Par défaut
    Merci la prochaine fois de respecter la charte de postage :http://www.developpez.net/forums/a69...gage-sql-lire/
    Cela évite de nous faire perdre du temps et c'est une marque de politesse !

    Donc je fait le travail que vous n'avez pas fait par faignantise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    -- création des tables
    CREATE TABLE T_STOCK_STK 
    (STK_ID            INT IDENTITY,
     STK_MATIERE       CHAR(8),
     STK_STOCK_INITIAL INT)
     
    CREATE TABLE T_CONSOMMATION_CNS
    (CNS_ID            INT IDENTITY,
     CNS_DATE          DATE,
     CNS_MATIERE       CHAR(8),
     CNS_RETRAIT       INT)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    -- alimentation du jeu d'essais :
    INSERT INTO T_STOCK_STK VALUES ('fer', 150000)
    INSERT INTO T_STOCK_STK VALUES ('cuivre', 250000)
     
    INSERT INTO T_CONSOMMATION_CNS VALUES ('20080101', 'fer', 50000)
    INSERT INTO T_CONSOMMATION_CNS VALUES ('20080201', 'fer', 30000)
    INSERT INTO T_CONSOMMATION_CNS VALUES ('20080301', 'fer', 20000)
    INSERT INTO T_CONSOMMATION_CNS VALUES ('20080401', 'fer', 60000)
    INSERT INTO T_CONSOMMATION_CNS VALUES ('20080501', 'fer', 50000)
    INSERT INTO T_CONSOMMATION_CNS VALUES ('20080601', 'fer', 30000)
    INSERT INTO T_CONSOMMATION_CNS VALUES ('20080701', 'fer', 50000)
    INSERT INTO T_CONSOMMATION_CNS VALUES ('20080801', 'fer', 30000)
    Maintenant décomposons la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    -- calcul de la consommation cumulée par dates :
    SELECT CNS_DATE, CNS_MATIERE, STK_STOCK_INITIAL,
           (SELECT SUM(CNS_RETRAIT)
            FROM   T_CONSOMMATION_CNS AS C2
            WHERE  C2.CNS_DATE <=  C.CNS_DATE
              AND  C2.CNS_MATIERE = C.CNS_MATIERE) AS CNS_CUMUL
    FROM   T_CONSOMMATION_CNS AS C
           INNER JOIN T_STOCK_STK AS S
                 ON C.CNS_MATIERE = S.STK_MATIERE
    résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CNS_DATE   CNS_MATIERE STK_STOCK_INITIAL CNS_CUMUL
    ---------- ----------- ----------------- -----------
    2008-01-01 fer         150000            50000
    2008-02-01 fer         150000            80000
    2008-03-01 fer         150000            100000
    2008-04-01 fer         150000            160000
    2008-05-01 fer         150000            210000
    2008-06-01 fer         150000            240000
    2008-07-01 fer         150000            290000
    2008-08-01 fer         150000            320000
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    -- dates justes avant épuisement :
    SELECT CNS_DATE, CNS_MATIERE, STK_STOCK_INITIAL,
           (SELECT SUM(CNS_RETRAIT)
            FROM   T_CONSOMMATION_CNS AS C2
            WHERE  C2.CNS_DATE <=  C.CNS_DATE
              AND  C2.CNS_MATIERE = C.CNS_MATIERE) AS CNS_CUMUL
    FROM   T_CONSOMMATION_CNS AS C
           INNER JOIN T_STOCK_STK AS S
                 ON C.CNS_MATIERE = S.STK_MATIERE
    WHERE  STK_STOCK_INITIAL >= (SELECT SUM(CNS_RETRAIT)
                                 FROM   T_CONSOMMATION_CNS AS C2
                                 WHERE  C2.CNS_DATE <=  C.CNS_DATE
                                   AND  C2.CNS_MATIERE = C.CNS_MATIERE
    résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CNS_DATE   CNS_MATIERE STK_STOCK_INITIAL CNS_CUMUL
    ---------- ----------- ----------------- -----------
    2008-01-01 fer         150000            50000
    2008-02-01 fer         150000            80000
    2008-03-01 fer         150000            100000
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    -- date la plus tardive avant épuisement (max) :                               
    SELECT MAX(CNS_DATE) AS DATE_LIMITE_AVANT_REAPPRO,
           CNS_MATIERE, STK_STOCK_INITIAL
    FROM   T_CONSOMMATION_CNS AS C
           INNER JOIN T_STOCK_STK AS S
                 ON C.CNS_MATIERE = S.STK_MATIERE
    WHERE  STK_STOCK_INITIAL >= (SELECT SUM(CNS_RETRAIT)
                                 FROM   T_CONSOMMATION_CNS AS C2
                                 WHERE  C2.CNS_DATE <=  C.CNS_DATE
                                   AND  C2.CNS_MATIERE = C.CNS_MATIERE)                               
    GROUP  BY CNS_MATIERE, STK_STOCK_INITIAL
    résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DATE_LIMITE_AVANT_REAPPRO CNS_MATIERE STK_STOCK_INITIAL
    ------------------------- ----------- -----------------
    2008-03-01                fer         150000
    CQFD !

    A +

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    merci de ta réponse c'est exactement ce que je cherchais à faire..

    Désolé pour le non respect de la charte ...je ferais plus attention la prochaine fois

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

Discussions similaires

  1. [Débutant] Calcul d'une date à partir d'une date de départ et d'une durée
    Par Marmotton76 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/04/2007, 10h39
  2. Réponses: 14
    Dernier message: 09/01/2007, 16h19
  3. [Dates] Calcul sur une date
    Par jpascal dans le forum Langage
    Réponses: 3
    Dernier message: 27/12/2006, 08h41
  4. [Dates] Faire un calcul sur une date?
    Par kevinf dans le forum Langage
    Réponses: 1
    Dernier message: 25/11/2006, 19h18
  5. Calcul d'une date de fin
    Par jym62 dans le forum Access
    Réponses: 7
    Dernier message: 30/08/2006, 20h47

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