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 :
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
Partager