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

SQL Oracle Discussion :

Problème sur une requête


Sujet :

SQL Oracle

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 87
    Par défaut Problème sur une requête
    Bonjour ! J'ai un petit souci concernant une requete.

    Voilà mon souci. J'ai un article (matricule)sur lequel une opération a été effectuée. Cette opération génère une entrée en stock (la date de création de l'opération correspondant à la date d'entrée). Toutes ces infos appartiennent à la table "operation".
    Ensuite je vais récupèré la date de sortie de stock dans la table "stock_mouvemt", afin d'optenir le delai entre l'entrée et la sortie du stock qu'a généré l'opération. Seulement voilà, ces 2 tables ne sont liées que par le matricule et voici le résultat que j'obtiens.

    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
     
          select L1.MATRICULE MATRICULE, L1.NUM_OPE NUM_OPE, L1.DT_ENTREE DT_ENTREE, L2.DT_SORTIE DT_SORTIE, (L2.DT_SORTIE-L1.DT_ENTREE) DELAI
          from(
              select o.num_matricule MATRICULE, o.num_operation NUM_OPE, o.dt_crea_ope DT_ENTREE -- la date de création de l'opération correspond à sa date d'entrée en stock
              from operation o
              where  o.num_matricule='1234'          --filtre sur le matricule
                order by DT_ENTREE
          )L1,
          (      
              select s.matricule MATRICULE, s.dttm_stock_mvt DT_SORTIE
              from stock_mouvemt s
              where s.mvt_type like 'SORTIE')
          )L2
          where L1.MATRICULE=L2.MATRICULE
            and L1.DT_ENTREE<L2.DT_SORTIE -- supprime les délai négatifs
    Matricule -------- NUM_OPE -------- DT_ENTREE ------- DT_SORTIE ------- DELAI
    1234 -------------- 1111 ------------ 01/01/09 --------- 05/01/09 --------- 4
    1234 -------------- 1111 ------------ 01/01/09 --------- 28/01/09 --------- 27
    1234 -------------- 1111 ------------ 01/01/09 --------- 06/02/09 --------- 36
    1234 -------------- 2222 ------------ 22/01/09 --------- 05/01/09 --------- -17
    1234 -------------- 2222 ------------ 22/01/09 --------- 28/01/09 --------- 6
    1234 -------------- 2222 ------------ 22/01/09 --------- 06/02/09 --------- 15


    Pour chaque opération il faudrait que je ne récupère que le délai minimum, comment faire pour ne récupèrer que celui-ci?


    J'espère avoir été assez claire...

    merci

    PS: Ma requete supprime les délais negatifs

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Essaye ça :
    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
    SELECT   MATRICULE,
             NUM_OPE  ,
             DT_ENTREE,
             DT_SORTIE,
             DELAI
    FROM
             (SELECT  L1.MATRICULE MATRICULE          ,
                      L1.NUM_OPE NUM_OPE               ,
                      L1.DT_ENTREE DT_ENTREE           ,
                      L2.DT_SORTIE DT_SORTIE           ,
                      (L2.DT_SORTIE -L1.DT_ENTREE) DELAI,
                      DENSE_RANK() OVER (PARTITION BY MATRICULE ORDER BY (L2.DT_SORTIE-L1.DT_ENTREE)) r
             FROM     operation l1,
                      stock_mouvemt l2
             WHERE    l1.num_matricule='1234' --filtre sur le matricule
                  AND L1.MATRICULE    =L2.MATRICULE
                  AND L1.DT_ENTREE    <L2.DT_SORTIE -- supprime les délai négatifs
                  AND L2.mvt_type     = 'SORTIE'
             )
    WHERE    r = 1
    ORDER BY DT_ENTREE

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Vous pourrez trouver un problème similaire au votre sur ce sujet :
    http://www.developpez.net/forums/d69...rnier-contrat/

    Il y a une solution "classique" avec aggrégat et une autre qui utilise les fonctions analytiques.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 87
    Par défaut
    Merci orafrance, ça marche au petit oignons. J'ai juste eu à changer la partition, je l'ai mis sur NUM_OP. Je connaissait pas cette fonction DENSE_RANK. Je me coucherai moins bête et elle me servira à l'avenir.

    Merci à toi aussi Waldar j'ai été voir ton lien, ça me servira bien aussi


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

Discussions similaires

  1. problème sur une requête imbriquée
    Par pbatty1 dans le forum Requêtes
    Réponses: 12
    Dernier message: 26/10/2007, 17h21
  2. problème sur une requête mysql
    Par atomikado dans le forum Requêtes
    Réponses: 4
    Dernier message: 05/10/2007, 16h04
  3. [Optimisation] Problème sur une requête UNION.
    Par françois62 dans le forum Requêtes
    Réponses: 5
    Dernier message: 28/06/2005, 16h08
  4. Problème sur une requête INSERT
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/06/2003, 08h45
  5. problème sur une requête!!!!!
    Par Mcgrady_01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/06/2003, 01h17

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