Voilà j'ai un petit souci sur une requete.
Pour expliquer la situation cela concerne une gestion d'articles. A savoir qu'un article en panne passe en "Intervention" pour être réparé et ce qu'on m'a demandé c'est que l'on affiche la moyenne des délais entre chaque intervention sur un article (entre la fin de l'une et le début de la suivante) sur les 3 derniers mois.
Et pour les articles n'ayant qu'une seule intervention on lui attribue le délai suivant : Date du début de traitement - la date d'il y a 3 mois.
Et pour les articles n'ayant eu aucune intervention on leur met 3 mois de delai (soit 90 jours).
donc je leur ai sorti le code suivant qui marche très bien
Tables et champs : WS=> Table "Intervention"
--> DT_WS_BEGIN = Date de début d'intervention
--> DT_WS_END = Date de fin d'intervention
--> CD_WO = N° intervention
--> CD_BOX = N° Article
BOX=> Table "Article"
--> CD_BOX = N° article
Le problème est qu'aujourd'hui on me demande de changer ça en faisant la même chose mais pas par rapport à la date du jour mais par rapport à une date entrée par l'utilisateur.
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 select round(avg(T1.delai))DELAI,'ARTICLE'TYPE from( select L2.BOX BOX,L1.cd_wo, decode(L1.delai,'',90,L1.delai)DELAI from( select B.CD_BOX BOX, CD_WO, WS.DT_WS_BEGIN D, WS.DT_WS_END F, case when to_date( WS.DT_WS_BEGIN) - to_date((lag(WS.DT_WS_END, 1) over(partition by B.CD_BOX order by WS.DT_WS_BEGIN))) is null then round(WS.DT_WS_BEGIN-(sysdate-90)) else to_date( WS.DT_WS_BEGIN) - to_date((lag(WS.DT_WS_END, 1) over(partition by B.CD_BOX order by WS.DT_WS_BEGIN))) end delai from WS, BOX B where B.CD_BOX=WS.CD_BOX and DT_WS_BEGIN between (sysdate-90) and sysdate /*###*/ --expliqué plus bas group by B.CD_BOX, CD_WO, WS.DT_WS_BEGIN, WS.DT_WS_END order by B.CD_BOX, CD_WO, WS.DT_WS_BEGIN )L1, ( select CD_BOX BOX from BOX )L2 where L1.BOX(+)=L2.BOX and decode(L1.delai,'',90,L1.delai) >= 1 )T1
Je précise que ma requete est intégrée dans une appli qui affiche que le résultat et où j'ai possibilité d'ajouter une zone de saisie qui remplacera les /*###*/ par un "and champs(que j'aurais administré) = saisie de l'utilisateur"
Donc pour résumer le problème je dois remplacer mon sysdate par une entrée manuelle.
Pas évident à expliquermais bon j'espère avoir été le plus clair possible
Partager