|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 5 ![]() |
Bonjour à tous,
n'ayant toujours pas trouvé la solution à mon problème, j'ai décidé de vous poser la question. J'effectue un reporting sur une base de donnée d'incidents, et j'aimerais organiser les actions d'un incident(traitement, escalade, redirection,....) par ordre de groupe de prise en charge, je m'explique : Je peux classer ces actions par ordre chronologique (ORDRE_ACTION), chaque action a un identifiant (ACTION_ID) Code :
La où je bloque, c'est pour obtenir les périodes de prise en charge des différents groupe. J'aimerais obtenir ceci : Code :
J'ai tout essayé, même les fonctions analytiques mais rien à faire, Je travaille sous sql server ou oracle, merci d'avance pour vos réponses, cdt. |
||||
|
|
10
|
|
|
#2 | ||||
|
Membre expérimenté
![]() François Inscription : février 2010 Messages : 305 ![]() |
Code :
Il y a un peu trop de vide, genre a la ligne 6. Par contre je me dit que peut-etre que quelqu'un d'autre reparer ce probleme de join avec un null. Code :
|
||||
|
|
00
|
|
|
#3 | ||||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
bonjour,
Avec de la recursion ca semble ok : Code :
Code :
|
||||
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 125 ![]() |
J'aurai tenté de passer par un count et une clause having pour ma part ...
Mais ca n'est qu'une idée Bon courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac) |
|
|
00
|
|
|
#5 | ||
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 5 ![]() |
Merci pour vos réponses, j'ai choisi d'opter pour la récursivité avec
Code :
En ajoutant à la jointure la dépendance des actions à l'incident : b.REQUEST_ID = a.incident_id Cela fonctionne bien pour un ou deux incident mais pour l'ensemble de la table : 53000 actions provenant de 15000 incidents il n'arrive pas à terminer sa requête. Le count m'a l'air compromis car j'ai besoin des valeurs de ligne précédent celle en cours de calcul. La récursivité est peut être plus performante chez oracle, je vais tester. Merci pour votre aide |
||
|
|
00
|
|
|
#6 | ||||
![]() ![]() |
Plus simple je pense :
Code :
Code :
__________________
Email : http://scr.im/waldar |
||||
|
00
|
|
|
#7 | ||
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 5 ![]() |
Merci Waldar pour ta réponse, le soucis c'est que je ne connais pas le nombre d'actions par incident à l'avance, en effet, Ordre_action commencera toujours à 1 mais selon les incidents(incident_id) il peut terminer à 18 ou 2.
Voyez le comme un arbre au final avec Code :
En espérant avoir été clair, merci |
||
|
|
00
|
|
|
#8 | |
![]() ![]() |
Citation:
Sauf le jeu de test pour reproduire votre table de départ, mais ce n'est qu'un jeu de test, pour vous la requête commence au-dessous. D'ailleurs il faudra rajouter les incident_id dans les group by / partition by.
__________________
Email : http://scr.im/waldar |
|
|
00
|
|
|
#9 |
|
Membre expérimenté
![]() François Inscription : février 2010 Messages : 305 ![]() |
Dans le deuxieme exemple de waldar, pourquoi le order by ordre ASC a la ligne 15?
|
|
|
00
|
|
|
#10 | |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
Citation:
J'ai chargé une table avec 15000 incident diff * 9 actions Récursion ou la 2eme solution de Waldar mettent à peu pres le même temps : entre 1min15 et 1min30 (c'est une fourchette sur plusieurs essais des solutions) J'ai essayé avec des index, et je n'ai pas eu de gain perceptible. Bref à vous de tester sur vos environnement pour utiliser la meilleur des 3. |
|
|
|
00
|
|
|
#11 | ||
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 5 ![]() |
Désolé waldar, je n'avais pas fait attention.
J'ai essayé les 2 solutions de waldar, Elle fonctionne mais pas completement :la prise en charge n'est pas respectée si un groupe apparaît 2 fois mais non successivement (ce qui est possible) : Code :
|
||
|
|
00
|
|
|
#12 | ||||
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 437 ![]() |
En testant la valeur précédente en fct analytique, afin de mettre un indicateur +1, puis en faisant la somme je pense que ça marche
Code :
Code :
__________________
More Code : More Bugs. Less Code : Less Bugs |
||||
|
|
00
|
|
|
#13 | ||
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 437 ![]() |
Attention au groupe NULL s'il intervient en premier !
Le lag(x,1) renvoie null si la ligne précédente n'existe pas. Il faut : Soit faire un NVL sur le groupe avec une valeur impossible Soit tester la première ligne différemment (rajouter un tests sur le row_number) pour toujours mettre p=1 voici le code sans NVL Code :
__________________
More Code : More Bugs. Less Code : Less Bugs |
||
|
|
00
|
|
|
#14 |
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 5 ![]() |
Désolé de ne pas avoir répondu plus tôt j'étais à un festival ce week end,
Merci beaucoup!! ça fonctionne, je le passe le post en résolu bonne journée.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com