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 :

Fonction analytique Last_value


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 107
    Points : 44
    Points
    44
    Par défaut Fonction analytique Last_value
    Bonjour,
    Je ne comprends pas pourquoi je n'arrive à faire une sélection de mes enregistrements en ne récupérant que le dernier selon un bloc défini.

    Voici mon exemple pour mieux comprendre :
    TYP_TRACE	IDTECH	ID_PROCESS	ID_TRACE	DATE_TRACE		TRACE
    D		1	195208		7684426		07/04/2016 10:05	Guillaume  a validé Valider description technique
    i		2	195208		7684459		07/04/2016 10:09	Matthieu  a rejeté Générer CONF MANU
    i		3	195208		7692298		08/04/2016 08:52	Matthieu  a rejeté Générer CONF MANU
    D		4	195208		7723044		12/04/2016 17:06	Guillaume  a validé Valider description technique
    F		5	195208		7727077		13/04/2016 14:06	Matthieu  a fait passer le process de Générer CONF MANU à Réalisé
    D		1	201675		7746104		18/04/2016 08:32	Christophe  a validé Valider description technique
    i		2	201675		7751596		19/04/2016 09:33	Brice  a rejeté Générer CONF MANU
    i		1	202843		7801982		28/04/2016 15:18	Matthieu  a rejeté Générer CONF MANU
    D		2	202843		7802413		28/04/2016 16:08	Alexandre  a validé Valider description technique
    i		3	202843		7808951		29/04/2016 11:21	Matthieu  a rejeté Générer CONF MANU
    i		4	202843		7808952		29/04/2016 11:21	Matthieu  a rejeté Générer CONF MANU
    D		5	202843		7811885		29/04/2016 16:46	Alexandre  a validé Valider description technique
    F		6	202843		7841897		02/05/2016 14:39	Matthieu  a fait passer le process de Générer CONF MANU à Réalisé
    
    On travaille sur l'id process.
    On est trié par ID_PROCESS / DATE_TRACE

    La première colonne m'indique dans quel type de trace je me trouve :
    • D pour Début
    • i pour itération
    • F pour Fin



    Le but est de calculer un Delai.

    Pour calculer ce délai il faut faire : Date_trace d'une itération - La la Date_Trace (précédente) de type Debut + ... + Date de Fin - Date de debut précédente
    Or lorsqu'il y a plusieurs itérations qui se suivent, il nous faut prendre la dernière itération - date de début

    Donc pour l'id process 195208, le calcul du Délai =
    08/04/2016 08:52 - 07/04/2016 10:05 -->22:46:35 (en HH:MI:SS)
    +
    13/04/16 14:06:09 - 12/04/16 17:06:34 --> 20:59:35

    Total du délai = 43:46:10

    Pour obtenir le tableau de ma requête j'ai fait cela :

    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
    WITH SEL_ENREG AS (
    SELECT  distinct 
     CASE 
            WHEN OP_CONF_TRACE.TRACE  LIKE '%vali%Valider description technique'   THEN  'D'
            WHEN OP_CONF_TRACE.TRACE  LIKE '%créé une OP depuis le WF BB%'   THEN  'D'
            WHEN OP_CONF_TRACE.TRACE  LIKE '%a reje%Générer CONF MANU%'       THEN  'i'
            WHEN OP_CONF_TRACE.TRACE  LIKE  '%a fait passer le process de Générer CONF MANU à Réal%'  THEN  'F'
    END AS TYP_TRACE,
    row_number() over (partition by  OP_CONF.ID_PROCESS order by OP_CONF_TRACE.ID_TRACE ) IDTECH,
      OP_CONF.ID_PROCESS,
        OP_CONF_TRACE.ID_TRACE,
      OP_CONF_TRACE.DATE_TRACE,
      OP_CONF_TRACE.TRACE
    FROM
      OP_CONF LEFT  JOIN OP_CONF_TRACE 
        ON OP_CONF.ID_PROCESS=OP_CONF_TRACE.ID_PROCESS
     
    WHERE
     
    (OP_CONF_TRACE.TRACE LIKE '%a rejeté Générer CONF MANU' OR OP_CONF_TRACE.TRACE LIKE '%passer le process de Générer CONF MANU à Réalisé' OR    OP_CONF_TRACE.TRACE LIKE '%validé Valider description technique' )
    and OP_CONF.ID_PROCESS IN (195208,201675,202843)
    order by 3,2
     )  
     SELECT 
    SEL_ENREG.*
     FROM SEL_ENREG
    order by 4,3
    Avez-vous un moyen pour que je puisse calculer ce délai et donc déjà dans un premier temps ne récupérer que les dernières itération ("i") de celles qui se suivent.
    Cordialement,
    PatGabJoe

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 126
    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 126
    Points : 38 509
    Points
    38 509
    Billets dans le blog
    9
    Par défaut
    bonjour,

    Désolé mais ce n'est pas clair
    - comment se fait il que pour un même id process l'on puisse avoir plusieurs débuts mais un seule fin ?
    - quel délai voulez vous calculer : entre début et fin en ce cas, s'il y a plusieurs débuts, lequel faut il retenir et que faut il calculer s'il n'y a pas de fin ?
    - ou, entre une itération particulière et la fin, dans ce cas, comment sélectionner la bonne itération pour un id_process, et même question que précédemment si pas de fin
    - ou encore entre 2 itérations, comment on les détermine, que fait on si on a une seule itération

Discussions similaires

  1. [SQL / PL/SQL] fonction analytique last_value
    Par Nounoursonne dans le forum SQL
    Réponses: 7
    Dernier message: 23/08/2007, 21h18
  2. [SQL / PL/SQL] fonction analytique last_value
    Par Nounoursonne dans le forum Oracle
    Réponses: 7
    Dernier message: 23/08/2007, 21h18
  3. Pb Fonction analytique last_value
    Par McM dans le forum SQL
    Réponses: 8
    Dernier message: 03/08/2007, 17h23
  4. Réponses: 7
    Dernier message: 21/11/2005, 14h21
  5. Réponses: 4
    Dernier message: 18/08/2005, 16h11

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