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 de données present sur des enregistrements different


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Calcul de données present sur des enregistrements different
    Bonjour,

    Actuellement je travail sur une base de données afin de gérer des stocks et dans le but de calculer des taux de couverture.

    Pour cela je souhaiterai savoir s’il est possible de faire des soustractions de date de deux lignes différente.

    Un petit exemple pour mieux me comprendre

    Date mouvement Produit état du stock
    12/04/2005 230145 2354
    19/04/2005 230145 1020
    26/04/2005 230145 3012

    je souhaiterais connaître le nombre de jour ou mon stock est resté à 2354 m²
    pour ça je dois faire 19/04/2005 – 12/04/2005
    Comment puis-je m y prendre pour faire ceci avec une requête ?

    Merci d’avance

  2. #2
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 4
    Points : 5
    Points
    5
    Par défaut reponse
    Bonjour ,tu peu pas géré ça par une requette perceque vous avez un traitement d'enregistrement ,mais tu peut travaille avec une declaration du curseur.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 776
    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 776
    Points : 52 751
    Points
    52 751
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Contrairement a ce que t'as dit ORAnab c'est parfaitement possible en SQL pur en une seule requête et sans curseur... Ce sera en outre, bien plus performant.

    Comme tu n'as pas indiqué sur quel SGBDR tu tavailles, voici le résultat en SQL normatif :

    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
    CREATE TABLE T_STOCK_STK
    (STK_DATE_MVT DATE,
     STK_PRODUIT  CHAR(6),
     STK_ETAT     INTEGER)
     
    INSERT INTO T_STOCK_STK VALUES ('2005-04-12', '230145', 2354)
    INSERT INTO T_STOCK_STK VALUES ('2005-04-19', '230145', 1020)
    INSERT INTO T_STOCK_STK VALUES ('2005-04-26', '230145', 3012)
     
     
    SELECT SK1.STK_DATE_MVT, SK1.STK_PRODUIT, SK1.STK_ETAT, 
           INTERVAL DAY MIN(SK2.STK_DATE_MVT) - SK1.STK_DATE_MVT AS STK_DUREE_JOUR
    FROM   T_STOCK_STK SK1
           LEFT OUTER JOIN T_STOCK_STK SK2
                ON SK1.STK_DATE_MVT < SK2.STK_DATE_MVT
    GROUP  BY SK1.STK_DATE_MVT, SK1.STK_PRODUIT, SK1.STK_ETAT
     
    STK_DATE_MVT     STK_PRODUIT STK_ETAT    STK_DUREE_JOUR   
    ---------------- ----------- ----------- ----------- 
    2005-04-12       230145      2354        7
    2005-04-19       230145      1020        7
    2005-04-26       230145      3012        NULL
    Le type INTERVAL étant rare dans les SGBD, voici un exemple de la requête pour SQL server :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT SK1.STK_DATE_MVT, SK1.STK_PRODUIT, SK1.STK_ETAT, 
           DATEDIFF(day, SK1.STK_DATE_MVT, MIN(SK2.STK_DATE_MVT)) AS STK_DUREE
    FROM   T_STOCK_STK SK1
           LEFT OUTER JOIN T_STOCK_STK SK2
                ON SK1.STK_DATE_MVT < SK2.STK_DATE_MVT
    GROUP  BY SK1.STK_DATE_MVT, SK1.STK_PRODUIT, SK1.STK_ETAT
    A +[/code]
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    salut ,je travaille sur un SGBD oracle9i

  5. #5
    Candidat au Club
    Inscrit en
    Mars 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Dsl de ne pas repondre rapidement , j'etais sur un autre projet en ce debut de semaine.

    J'utilise access comme SGBDR et il y a une petite subtilité dans ma table , je ne souhaite pas faire systematique une soustraction entre l'enregistrement 1 et n+1.
    En effet dans ma base j'aimerai faire des soustractions pour les enregistrements concernant le meme produit et la meme machine en sachant qu il peut y avoir plusieurs enregistrements qui les separent.

    exemple de la structure de ma table

    Annee Mois Date_Mvt Produit Mach Fam_Str D Entrée sorties Ecart stock stockglob Us
    2002 5 28/05/2002 BL 230347 EEIB 217 0 -4 -4 84 84 pc
    2002 5 28/05/2002 BL 230350 EEIB 217 0 -2 -2 29 29 pc
    2002 5 28/05/2002 BL 230353 EEIB 217 0 -13 -13 51 51 pc
    2002 5 28/05/2002 BL 230354 EEIB 210 0 -73 -73 327 327 pc

    Merci encore pour vos réponses ^^

  6. #6
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    et bien tu rajoutes dans la jointure de sqlpro l'identifiant du produit ainsi que celui de la machine.

  7. #7
    Candidat au Club
    Inscrit en
    Mars 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    merci bcp a tous

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/11/2007, 23h31
  2. Réponses: 4
    Dernier message: 27/05/2006, 20h30
  3. [WD9] Cliquer sur des enregistrements dans une table
    Par oz80 dans le forum WinDev
    Réponses: 2
    Dernier message: 15/12/2005, 20h11
  4. Réponses: 1
    Dernier message: 12/12/2005, 16h11
  5. Réponses: 8
    Dernier message: 24/08/2004, 22h25

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