Bonjour,

Il m'est difficile 'aujourd'hui de savoir optimizer ma requête et notamment mes jointures car je n'y connais pas grand chose en optimisation.

pouvez-vous me dire comment optimiser cela ?
j'ai plusieurs jointure en left et inner join et je ne sais comment faire evoluer cela. La partie en rouge dans la requête. Je pense que des regroupements de jointure peuvent être faite mais pas évident pour moi
Voici la requête :
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
SELECT
    nvl(irsa.interaction_resource_id,0) as interaction_resource_id
  /* gestion des dates */
  , to_char(isa.start_date,'yyyyMMddHH24') || trim(to_char(( (to_char(isa.start_date,'HH24')) *4 
      + (( to_char(isa.start_date,'mi')-  mod(to_char(isa.start_date,'mi'),15) ) /15)),'00')) as iddate	
    , isa.interaction_id as interaction_id
    , irsa.INTERACTION_RESOURCE_ORDINAL as INTERACTION_RESOURCE_ORDINAL
	, isa.media_server_ixn_guid as INTERACTION_CONNID
	, isa.CONNID as CONNID
	, irsa.resource_group_combination_key as INT_RES_GROUP_COMB_KEY
    , irsa.PREV_IRF_ID as PREV_IRF_ID
	, irsa.last_mediation_segment_id as last_mediation_segment_id
    , irsa.ressource_key as resource_key
	, irsa.resource_name as resource_name
    , irsa.resource_type_code as resource_type_code
    , irsa.resource_subtype as resource_subtype
    , irsa.start_date
    , irsa.end_date
  /* gestion des dates */
    /* annee */
    , trunc(isa.start_date,'yyyy') as nearest_year
    /* trimestre */
    , trunc(isa.start_date,'Q') as nearest_trimester
    /* mois */ 
    , trunc(isa.start_date,'MM') as nearest_month
    /* semaine */
    , trunc(isa.start_date,'IW') as nearest_week /* IW pour Lundi */
    /* jour */
    , trunc(isa.start_date,'dd') as nearest_day
    /* heure */
    , trunc(isa.start_date,'hh') as nearest_hour
    /* quart d'heure */
    , trunc(isa.start_date,'mi') -                          /* truncate to the nearest minute */
    numtodsinterval(                                /* convert the minutes in number to interval type and subtract. */
                   mod(to_char(isa.start_date,'mi'),15),  /* find the minutes from the nearest quarter */
                  'minute'                          
                  ) as nearest_quarter
    , isa.MEDIA_TYPE_KEY as MEDIA_TYPE_KEY
    , irsa.media_name as MEDIA_NAME
    , isa.INTERACTION_TYPE as INTTYPE_CODE
    , irsa.technical_result as TECRES_CODE
    , isa.source as source
    , isa.target as target
    , isa.status as status
    , irsa.resource_role_code as RESROLE_CODE
    , irsa.place_name as place_name
 
 /* infos */ 
--  , irsa.ud_service_name as ud_service_name
	, case
		-- si frais
		when irsa.RESOURCE_ROLE_CODE in ('ROUTEDTO','RECEIVED') 
						and isa.INTERACTION_TYPE = 'Inbound'
		then irsa.UD_SERVICE_INIT
		
		-- efface le UD_SERVICE_NAME pour les cas suivant : TRF AG AVG ou ACC - TRF EXT AVG ou ACC - ligne INITIATEDCONSULT autre que TRF ACC SERV
		when (
				-- IXNV_TRFEXT_CUSTO_ACC
				(irsa.LAST_VQUEUE = 'NONE' 
						and irsa.RESOURCE_TYPE_CODE = 'ROUTINGPOINT' 
						and irsa.UD_MODE_TRANSFERT = 'ACCMP') 
							
				-- IXNV_TRFEXT_CUSTO_AVG
				or (irsa.LAST_VQUEUE = 'NONE'
						and irsa.RESOURCE_TYPE_CODE = 'ROUTINGPOINT'
						and irsa.UD_MODE_TRANSFERT = 'AVGLE')
			   
				-- IXNV_TRFAG_ACC
				or (irsa.LAST_VQUEUE = 'NONE'
						and irsa.RESOURCE_ROLE_CODE in ('RECEIVEDTRANSFER','RECEIVEDCONSULT','INCONFERENCE')
						and nvl(irsa_parent.RESOURCE_ROLE_CODE,'UNKNOWN') = 'INITIATEDCONSULT'
						and irsa.RESOURCE_TYPE_CODE = 'AGENT')
							
				-- IXNV_TRFAG_AVG
				or  ( irsa.LAST_VQUEUE = 'NONE'
						and irsa.RESOURCE_ROLE_CODE = 'RECEIVEDTRANSFER'
						and nvl(irsa_parent.RESOURCE_ROLE_CODE,'UNKNOWN') <> 'INITIATEDCONSULT'
						and irsa.RESOURCE_TYPE_CODE = 'AGENT'
					)
				or (irsa.RESOURCE_ROLE_CODE = 'INITIATEDCONSULT'
						and (
								(not(
										irsa_dest.LAST_VQUEUE <> 'NONE'
										and ((irsa_dest.UD_TRANSFERT = 'INT') or (irsa_dest.UD_TRANSFERT = 'EXT'))
										and irsa_dest.UD_MODE_TRANSFERT = 'ACCMP'
										and irsa_dest.RESOURCE_ROLE_CODE in ('RECEIVEDTRANSFER','RECEIVEDCONSULT','INCONFERENCE')
									)
								) -- ligne INITIATEDCONSULT qui ne sont pas un transfert acc vers service
								 or irsa.TECHNICAL_RESULT = 'DestinationBusy'
								 or ((irsa.TECHNICAL_RESULT = 'Abandoned') and (irsa.RESOURCE_TYPE_CODE = 'AGENT'))
								 or (irsa.TECHNICAL_RESULT in('Transferred', 'Conferenced', 'Completed')
										and irsa_dest.interaction_id is null) -- transfert ACC vers num ext / conférence vers num ext / consult vers num ext 
 
							)
				)
			)
		then '-'
		
		-- si tranfert acc vers service on prend la valeur du grand père(bug infomart écrasement de données attachés)
		when (irsa_dest_dest_trf_srv_acc.LAST_VQUEUE <> 'NONE'
			and irsa_dest_dest_trf_srv_acc.UD_TRANSFERT in ('INT','EXT')
			and irsa_dest_dest_trf_srv_acc.UD_MODE_TRANSFERT = 'ACCMP'
			and irsa_dest_dest_trf_srv_acc.RESOURCE_ROLE_CODE = 'RECEIVEDTRANSFER')
		then irsa_grand_parent.ud_service_name
		
    else irsa.ud_service_name
    end as ud_service_name
	
    , irsa.sous_type_target as sous_type_target -- voix, chat , mail
    , irsa.ud_list_cibles as ud_list_cibles
    , irsa.ud_list_fa as ud_list_fa
    , irsa.ud_gim_cible as ud_gim_cible
    , irsa.ud_fa_flux as ud_fa_flux
    , case when isa.INTERACTION_TYPE = 'Inbound'
			then nvl(irsa.ud_dnis,isa.target)
		   when isa.INTERACTION_TYPE in ('Outbound','Internal')
			then isa.target
	  end as ud_dnis

    , case  when isa.INTERACTION_TYPE in ('Outbound','Internal')
			then irsa_first.place_name
			when (isa.INTERACTION_TYPE = 'Inbound')
			then nvl(irsa.ud_ani,isa.source)
	  end as ud_ani
	
    , irsa.ud_agent as ud_agent
    , irsa.ud_msisdn as ud_msisdn
    , irsa.ud_rona as ud_rona
    , irsa.ud_list_service as ud_list_service
    , irsa.ud_list_fs as ud_list_fs
    , irsa.UD_SERVICE_INIT as UD_SERVICE_INIT -- voix, chat , mail
    , irsa.UD_SERVICE_ANTE as UD_SERVICE_ANTE
    , nvl(irsa.dispositioncode,'Non renseignee') as dispositioncode -- voix, chat , mail  	
    , irsa.ideforce as ideforce -- voix, chat , mail
    , irsa.nom_contact as nom_contact -- voix, chat , mail
    , irsa.ud_num_compte as ud_num_compte
    , irsa.ud_cible as ud_cible -- voix
    , irsa.ud_code_vip as ud_code_vip -- voix
    , irsa.ud_dissu_action as ud_dissu_action
    , irsa.prenom_contact as prenom_contact -- voix, chat , mail
    , irsa.contactid as contactid -- voix, chat , mail
    , irsa.interactionid as interactionid -- voix, chat , mail
    , irsa.ud_service_prec as ud_service_prec -- voix, chat , mail
    , irsa.ud_ewt as ud_ewt
    , irsa.NUM_NOIR as NUM_NOIR -- voix
    , irsa.ud_choix_svi as ud_choix_svi -- voix
    , irsa.ud_gim_site as ud_gim_site -- voix, chat , mail
    , irsa.ud_horaire as ud_horaire -- voix, chat , mail
    , irsa.ud_nom_flux as ud_nom_flux
    , irsa.ud_ident_type as ud_ident_type
    , irsa.sous_type as sous_type -- voix, chat , mail
    , irsa.type as type -- voix, chat , mail
    , irsa.ud_call_result as ud_call_result
    , irsa.ud_gim_liste_site as ud_gim_liste_site -- voix, chat , mail
    , irsa.ud_nom_svi as ud_nom_svi -- voix
    , irsa.ud_bandeau as ud_bandeau
    , irsa.ud_dissu_type as ud_dissu_type
    , irsa.ud_priorite as ud_priorite
    , irsa.ud_id_profil_routage as ud_id_profil_routage
    , irsa.ud_distrib as ud_distrib
    , irsa.ud_nom_presta as ud_nom_presta
    , irsa.UD_MODE_TRANSFERT as UD_MODE_TRANSFERT -- voix, chat , mail
    , irsa.UD_TRANSFERT as UD_TRANSFERT
    , irsa.ud_multi_contact as ud_multi_contact -- voix, chat , mail
    , irsa.UD_NI as UD_NI -- voix, chat , mail	
    , irsa_dest.mandora_service_name as UD_SERVICE_DEST
	, irsa.MANDORA_SERVICE_NAME as MANDORA_SERVICE_NAME
    , irsa.RESULT_REASON_CODE as RESULT_REASON_CODE
    , nvl(sk.RESOURCE_SKILL_FACT_KEY,0) as RESOURCE_SKILL_SITE_FACT_KEY

-- calcul du type de segment
	, case
		-- IXNV_CUSTOMER_NEW (frais) => RESOURCE_ROLE_CODE = ROUTEDTO
			when (irsa.RESOURCE_ROLE_CODE = 'ROUTEDTO' 
					or irsa.RESOURCE_ROLE_CODE = 'RECEIVED')  -- abandon avant d'être routé
					and isa.INTERACTION_TYPE = 'Inbound'
					-- or irsa.prev_irf_id is null 				
			then 'IXNV_CUSTOMER_NEW'
		   
		-- IXNV_AGENT_NEW (CallType Outbound & RESOURCE_ROLE_CODE = INITIATED)
			when  isa.INTERACTION_TYPE = 'Outbound' and irsa.RESOURCE_ROLE_CODE = 'INITIATED'
			then 'IXNV_AGENT_NEW'
			
		-- IXNV_TRFSRV_ACC (nb med > 0 + UD_TRANSFERT = INT|EXT + UD_MODE_TRANSFERT = ACCMP + RESOURCE_ROLE_CODE = RECEIVEDTRANSFER)
			when irsa.LAST_VQUEUE <> 'NONE'
					and ((irsa.UD_TRANSFERT = 'INT') or (irsa.UD_TRANSFERT = 'EXT')) 
					and irsa.UD_MODE_TRANSFERT = 'ACCMP'
					and irsa.RESOURCE_ROLE_CODE = 'RECEIVEDTRANSFER'
			then 'IXNV_TRFSRV_ACC'  -- reçu
		   
		-- IXNV_TRFSRV_AVG (nb med > 0 + UD_TRANSFERT = INT|EXT + UD_MODE_TRANSFERT = AVGLE + RESOURCE_ROLE_CODE = RECEIVEDTRANSFER)
			when irsa.LAST_VQUEUE <> 'NONE'
					and ((irsa.UD_TRANSFERT = 'INT') or (irsa.UD_TRANSFERT = 'EXT')) 
					and irsa.UD_MODE_TRANSFERT = 'AVGLE'
					and irsa.RESOURCE_ROLE_CODE = 'RECEIVEDTRANSFER'
			then 'IXNV_TRFSRV_AVG'

		-- IXNV_TRFEXT_CUSTO_ACC (nb med = 0 + UD_TRANSFERT = NOEXT + UD_MODE_TRANSFERT = ACCMP)
			when irsa.LAST_VQUEUE = 'NONE'
					and irsa.UD_TRANSFERT = 'NOEXT'
					and irsa.UD_MODE_TRANSFERT = 'ACCMP'
					and irsa.RESOURCE_TYPE_CODE = 'ROUTINGPOINT'
			then 'IXNV_TRFEXT_CUSTO_ACC'

		-- IXNV_TRFEXT_CUSTO_AVG (nb med = 0 + UD_TRANSFERT = NOEXT + UD_MODE_TRANSFERT = AVGLE)
			when irsa.LAST_VQUEUE = 'NONE'
					and irsa.UD_TRANSFERT = 'NOEXT'
					and irsa.UD_MODE_TRANSFERT = 'AVGLE'
					and irsa.RESOURCE_TYPE_CODE = 'ROUTINGPOINT'					
			then 'IXNV_TRFEXT_CUSTO_AVG'
			
		-- IXNV_TRFEXTNATIF_ACC(xxxxx) -- n'existe pas dans infomart
		-- IXNV_TRFEXTNATIF_AVG(xxxxx) -- n'existe pas dans infomart
			
		-- IXNV_TRFAG_ACC (nb med = 0 + RESOURCE_ROLE_CODE = RECEIVEDTRANSFER + parent.resource_role_code = INITIATEDCONSULT + UD_TRANSFERT != NOEXT)
			when irsa.LAST_VQUEUE = 'NONE'
					and irsa.RESOURCE_ROLE_CODE = 'RECEIVEDTRANSFER'
					and nvl(irsa_parent.RESOURCE_ROLE_CODE,'UNKNOWN') = 'INITIATEDCONSULT'
					and irsa.RESOURCE_TYPE_CODE = 'AGENT'
					--and irsa.UD_TRANSFERT <> 'NOEXT' -- en conflit avec un transfert custo ACC vers num ext échoué				
			then 'IXNV_TRFAG_ACC'

		-- IXNV_TRFAG_AVG ( nb med = 0 + RESOURCE_ROLE_CODE = RECEIVEDTRANSFER + parent.resource_role_code != INITIATEDCONSULT + UD_TRANSFERT != NOEXT)
			when irsa.LAST_VQUEUE = 'NONE'
					and irsa.RESOURCE_ROLE_CODE = 'RECEIVEDTRANSFER'
					and nvl(irsa_parent.RESOURCE_ROLE_CODE,'UNKNOWN') <> 'INITIATEDCONSULT'
					and irsa.RESOURCE_TYPE_CODE = 'AGENT'
					-- and UPPER(irsa.UD_TRANSFERT) <> 'NOEXT' -- en conflit avec un transfert custo AVG vers num ext échoué				
			then 'IXNV_TRFAG_AVG'		

		-- conférence émise
			when irsa.RESOURCE_ROLE_CODE = 'INITIATEDCONSULT' and irsa_dest.RESOURCE_ROLE_CODE = 'INCONFERENCE'	
			then 'IXNV_CONF_EMIS'

		-- conférence reçue
			when irsa.RESOURCE_ROLE_CODE = 'INCONFERENCE'	
			then 'IXNV_CONF_RECU'			

		-- IXNV_CONSULT_SERV_EMIS
			when irsa.RESOURCE_ROLE_CODE = 'INITIATEDCONSULT' 
					and irsa_dest.LAST_VQUEUE <> 'NONE'
					and irsa_dest.UD_TRANSFERT in ('INT','EXT') 
					and irsa_dest.UD_MODE_TRANSFERT = 'ACCMP'
					and irsa_dest.RESOURCE_ROLE_CODE in ('RECEIVEDTRANSFER','RECEIVEDCONSULT','INCONFERENCE')
			then 'IXNV_CONSULT_SERV_EMIS'
			
		-- IXNV_CONSULT_AGENT_EMIS
			when irsa.RESOURCE_ROLE_CODE = 'INITIATEDCONSULT'
					and irsa_dest.LAST_VQUEUE = 'NONE'
					and irsa_dest.RESOURCE_ROLE_CODE in ('RECEIVEDTRANSFER','RECEIVEDCONSULT','INCONFERENCE')
					and irsa_dest.RESOURCE_TYPE_CODE = 'AGENT'
			then 'IXNV_CONSULT_AGENT_EMIS'

		-- IXNV_CONSULT_EXT_EMIS
			when irsa.RESOURCE_ROLE_CODE = 'INITIATEDCONSULT'
					and (
							-- IXNV_TRFEXT_CUSTO_ACC
							( irsa_dest.LAST_VQUEUE = 'NONE'
								and irsa_dest.UD_TRANSFERT = 'NOEXT'
								and irsa_dest.UD_MODE_TRANSFERT = 'ACCMP'
								and irsa_dest.RESOURCE_TYPE_CODE = 'ROUTINGPOINT'
							)
							or irsa_dest.interaction_id is null -- transfert ext acc natif car pas de irsa_dest
						)
			then 'IXNV_CONSULT_EXT_EMIS'				
			
		-- IXNV_CONSULT (RESOURCE_ROLE_CODE = INITIATEDCONSULT)
			when irsa.RESOURCE_ROLE_CODE = 'INITIATEDCONSULT'
			then 'IXNV_CONSULT_EMIS'

		-- IXNV_CONSULT_RECU (RESOURCE_ROLE_CODE = RECEIVEDCONSULT)
			when irsa.RESOURCE_ROLE_CODE = 'RECEIVEDCONSULT'
			then 'IXNV_CONSULT_RECU'
			
		-- IXNV_INTERNAL (CallType Internal)
			when isa.INTERACTION_TYPE = 'Internal'
			then 'IXNV_INTERNAL'
		
		else 'UNKNOWN'
		end as 	UD_GIM_IXN_TYPE -- type de segment
	
	
	, irsa.last_vqueue as LAST_VQUEUE
	, max(tmp.voix_duree_sonnerie) as  voix_ring_duration -- Durée de sonnerie res
	, max(tmp.voix_duree_conversation) as voix_talk_duration -- Durée de conversation res
	, max(tmp.voix_duree_consult) as voix_duree_consult -- Durée de consultation
	, max(tmp.voix_duree_post_appel) as voix_after_call_duration -- Durée Post appel res
	, max(tmp.voix_duree_traitement_agt) as voix_traitement_duration -- Durée de traitement res
	, max(tmp.voix_routing_point_duration) as voix_routing_point_duration -- Durée de FA res
	, sum(tmp.voix_duree_numerotation) as voix_dial_duration -- Durée de numérotation
	, max(tmp.voix_duree_conv_client) as voix_customer_talk_duration -- Durée de conversation avec un client
	, sum(tmp.voix_duree_consult_emise) as VOIX_CONS_INIT_TALK_DURATION -- Durée de consult emise
	, sum(tmp.voix_duree_phase_init) as CONS_INIT_DIAL_DURATION -- Durée de la phase d'initialisation
	, max(tmp.voix_duree_comm_entrante) as voix_duree_comm_entrante -- Durée de communication entrante
	, max(tmp.voix_duree_comm_sortante) as voix_duree_comm_sortante -- Durée de communication sortante
	, max(tmp.voix_duree_garde) as voix_duree_garde -- Durée de mise en garde
	
	, 1 as voix_system_flag
	, sum(tmp.voix_presente_flag) as voix_presente_flag -- INT_app_presente_flag
	, sum(tmp.voix_repondu_flag) as voix_repondu_flag -- INT_app_repondu_flag
	, sum(tmp.voix_sortant_flag) as voix_sortant_flag -- INT_app_sortant_flag
	, sum(tmp.voix_sort_poste_flag) as voix_sort_poste_flag -- INT_sort_poste_flag
	, sum(tmp.voix_sort_bandeau_flag) as voix_sort_bandeau_flag -- INT_sort_bandeau_flag
	, sum(tmp.voix_consul_emis_flag) as voix_consul_emis_flag -- INT_consul_emis_flag
	, sum(tmp.voix_consul_recu_flag) as voix_consul_recu_flag -- INT_consul_recu_flag
	, sum(tmp.voix_transf_flag) as voix_transf_flag -- INT_transf_flag
	, sum(tmp.voix_transf_avg_serv_flag) as voix_transf_avg_serv_flag -- INT_transf_avg_serv_flag
	, sum(tmp.voix_transf_acc_serv_flag) as voix_transf_acc_serv_flag -- INT_transf_acc_serv_flag
	, sum(tmp.voix_transf_serv_flag) as voix_transf_serv_flag -- INT_transf_serv_flag
	, sum(tmp.voix_transf_prestataire_flag) as voix_transf_prestataire_flag  -- INT_transf_prestataire_flag
	, sum(tmp.voix_transf_cust_acc_ext_flag) as voix_transf_cust_acc_ext_flag -- INT_transf_cust_acc_ext_flag
	, sum(tmp.voix_transf_natif_agent_flag) as voix_transf_natif_agent_flag -- INT_transf_natif_agent_flag
	, sum(tmp.voix_transf_num_noir_flag) as voix_transf_num_noir_flag  -- INT_transf_num_noir_flag
	, sum(tmp.voix_transf_recu_serv_flag) as voix_transf_recu_serv_flag -- INT_transf_recu_serv_flag
	, sum(tmp.voix_transf_recu_agent_flag) as voix_transf_recu_agent_flag -- INT_transf_recu_agent_flag
	, sum(tmp.voix_transf_recu_flag) as voix_transf_recu_flag  -- INT_transf_recu_flag
	, sum(tmp.voix_trans_custo_flag) as voix_trans_custo_flag
	, sum(tmp.voix_interne_flag) as voix_interne_flag -- INT_interne_flag
	, sum(tmp.voix_interne_emetteur_flag) as voix_interne_emetteur_flag -- INT_interne_flag
	, sum(tmp.voix_interne_receveur_flag) as voix_interne_receveur_flag -- INT_interne_flag
	, sum(tmp.voix_dissu_flag) as voix_dissu_flag -- INT_app_dissu_flag
	, sum(tmp.voix_rona_flag) as voix_rona_flag -- INT_rona_flag
	, sum(tmp.voix_rona_appel_flag) as voix_rona_appel_flag -- INT_rona_appel_flag
	, sum(tmp.voix_conv_courte) as voix_conv_courte -- INT_conv_courte
	, sum(tmp.voix_bandeau_flag) as voix_bandeau_flag -- INT_bandeau_flag
	, sum(tmp.voix_distrib_prest_flag) as voix_distrib_prest_flag -- INT_distrib_prest_flag
	, sum(tmp.voix_distrib_noir_flag) as voix_distrib_noir_flag -- INT_distrib_noir_flag
	, sum(tmp.voix_garde_flag) as voix_garde_flag -- INT_garde_flag
	, sum(tmp.voix_garde_nb) as voix_garde_nb -- INT_garde_nb
	, sum(tmp.voix_activite_flag) as voix_activite_flag -- INT_activite_flag
	, sum(tmp.voix_abandonne_flag) as voix_abandonne_flag -- INT_abandonne_flag
	, sum(tmp.voix_echoue_flag) as voix_echoue_flag -- INT_echoue_flag
	, sum(tmp.voix_decroche_flag) as voix_decroche_flag -- INT_decroche_flag
	, sum(tmp.voix_personnel_Flag) as voix_personnel_Flag -- INT_personel_flag
	, sum(tmp.voix_heureouvree_flag) as voix_heureouvree_flag -- INT_heureouvree_flag
	
from
  etlnt_src_ixn_subject_area isa
  -- table irsa pour les infos de contextes.
   inner join etlnt_src_ixn_res_subject_area irsa on isa.interaction_id = irsa.interaction_id -- fils
   
   inner join (select * from etlnt_src_ixn_res_subject_area where media_type_key = 1) irsa_first 
			on irsa.interaction_id = irsa_first.interaction_id and irsa_first.prev_irf_id is null -- premier irsa de l'interaction

   left join (select * from etlnt_src_ixn_res_subject_area where media_type_key = 1 and RESOURCE_ROLE_CODE <> 'INITIATEDCONSULT') irsa_dest 
			on  irsa.interaction_resource_id = irsa_dest.prev_irf_id -- ajout le 06/09/2016 -- petit fils

   left join ( 
				select *  from etlnt_src_ixn_res_subject_area trf_srv_acc_emis
				where media_type_key = 1 
						and trf_srv_acc_emis.RESOURCE_ROLE_CODE = 'INITIATEDCONSULT' 
						and trf_srv_acc_emis.technical_result = 'Transferred'
			) irsa_dest_trf_srv_acc on irsa.interaction_resource_id = irsa_dest_trf_srv_acc.prev_irf_id -- petit fils transféré en consult


   -- arrière petit fils
   left join (select * from etlnt_src_ixn_res_subject_area where media_type_key = 1) irsa_dest_dest_trf_srv_acc 
		on irsa_dest_dest_trf_srv_acc.prev_irf_id = irsa_dest_trf_srv_acc.interaction_resource_id

   left join (select * from etlnt_src_ixn_res_subject_area where media_type_key = 1) irsa_parent 
		on irsa_parent.interaction_resource_id = irsa.prev_irf_id -- ajout le 22/11/2016
		
   left join (select *  from etlnt_src_ixn_res_subject_area where media_type_key = 1) irsa_grand_parent 
		on irsa_grand_parent.interaction_resource_id = irsa_parent.prev_irf_id  -- ajout le 22/11/2016
   
   -- sites 
   left join ( select s.RESOURCE_SKILL_FACT_KEY,s.resource_key, s.start_date, s.end_date, skt.skill_type
        from etlnt_src_skill s left join etlnt_src_skill_type skt on s.skill_name = skt.skill_name
        and s.start_date >= skt.start_date  and  ( s.end_date <= skt.end_date or skt.end_date is null)
        ) sk on irsa.ressource_key = sk.RESOURCE_KEY
          and irsa.start_date >= sk.start_date
          and irsa.start_date <= sk.end_date
          and UPPER(sk.skill_type) = 'SITE' 
   inner join ( 
				/* Recuperation et agglomerations des donnees pre calculées au niveau ixn_res 
				pour flag appels presente : max car 1 valeur pour un ixn_res
				reste flag : somme : possiiblité de plusieurs cas pour 1 ixn_res
				pour durées : somme
				*/
				select 
				typ.interaction_id
				, typ.interaction_resource_id
				
				  /* flag */
				, max(voix_presente_flag) as voix_presente_flag -- INT_app_presente_flag
				, max(voix_repondu_flag) as voix_repondu_flag -- INT_app_repondu_flag
				, max(voix_sortant_flag) as voix_sortant_flag -- INT_app_sortant_flag
				, max(voix_sort_poste_flag) as voix_sort_poste_flag -- INT_sort_poste_flag
				, max(voix_sort_bandeau_flag) as voix_sort_bandeau_flag -- INT_sort_bandeau_flag
				, sum(voix_consul_emis_flag) as voix_consul_emis_flag -- INT_consul_emis_flag
				, sum(voix_consul_recu_flag) as voix_consul_recu_flag -- INT_consul_recu_flag
				, sum(voix_transf_flag) as voix_transf_flag -- INT_transf_flag
				, sum(voix_transf_avg_serv_flag) as voix_transf_avg_serv_flag -- INT_transf_avg_serv_flag
				, sum(voix_transf_acc_serv_flag) as voix_transf_acc_serv_flag -- INT_transf_acc_serv_flag
				, sum(voix_transf_serv_flag) as voix_transf_serv_flag -- INT_transf_serv_flag
				, sum(voix_transf_prestataire_flag) as voix_transf_prestataire_flag  -- INT_transf_prestataire_flag
				, sum(voix_transf_cust_acc_ext_flag) as voix_transf_cust_acc_ext_flag -- INT_transf_cust_acc_ext_flag
				, sum(voix_transf_natif_agent_flag) as voix_transf_natif_agent_flag -- INT_transf_natif_agent_flag
				, sum(voix_transf_num_noir_flag) as voix_transf_num_noir_flag  -- INT_transf_num_noir_flag
				, sum(voix_transf_recu_serv_flag) as voix_transf_recu_serv_flag -- INT_transf_recu_serv_flag
				, sum(voix_transf_recu_agent_flag) as voix_transf_recu_agent_flag -- INT_transf_recu_agent_flag
				, sum(voix_transf_recu_flag) as voix_transf_recu_flag  -- INT_transf_recu_flag
				, sum(voix_trans_custo_flag) as voix_trans_custo_flag
				, sum(voix_interne_flag) as voix_interne_flag -- INT_interne_flag
				, sum(voix_interne_emetteur_flag) as voix_interne_emetteur_flag -- INT_interne_flag
				, sum(voix_interne_receveur_flag) as voix_interne_receveur_flag -- INT_interne_flag
				, sum(voix_dissu_flag) as voix_dissu_flag -- INT_app_dissu_flag
				, sum(voix_rona_flag) as voix_rona_flag -- INT_rona_flag
				, sum(voix_rona_appel_flag) as voix_rona_appel_flag -- INT_rona_appel_flag
				, sum(voix_conv_courte) as voix_conv_courte -- INT_conv_courte
				, sum(voix_bandeau_flag) as voix_bandeau_flag -- INT_bandeau_flag
				, sum(voix_distrib_prest_flag) as voix_distrib_prest_flag -- INT_distrib_prest_flag
				, sum(voix_distrib_noir_flag) as voix_distrib_noir_flag -- INT_distrib_noir_flag
				, sum(voix_garde_flag) as voix_garde_flag -- INT_garde_flag
				, sum(voix_garde_nb) as voix_garde_nb -- INT_garde_nb
				, sum(voix_activite_flag) as voix_activite_flag -- INT_activite_flag
				, sum(voix_abandonne_flag) as voix_abandonne_flag -- INT_abandonne_flag
				, sum(voix_echoue_flag) as voix_echoue_flag -- INT_echoue_flag
				, sum(voix_decroche_flag) as voix_decroche_flag -- INT_decroche_flag
				, sum(voix_personnel_Flag) as voix_personnel_Flag -- INT_personel_flag
				, sum(voix_heureouvree_flag) as voix_heureouvree_flag -- INT_heureouvree_flag
				
				  /* durees */
				, max(voix_duree_sonnerie) as  voix_duree_sonnerie -- Durée de sonnerie res
				, max(voix_duree_conversation) as voix_duree_conversation -- Durée de conversation res
				, max(voix_duree_consult) as voix_duree_consult -- Durée de consultation res
				, max(voix_duree_post_appel) as voix_duree_post_appel -- Durée Post appel res
				, max(voix_duree_traitement_agt) as voix_duree_traitement_agt -- Durée de traitement res
				, max(voix_routing_point_duration) as voix_routing_point_duration -- Durée de FA res
				, sum(voix_duree_numerotation) as voix_duree_numerotation -- Durée de numérotation
				, max(voix_duree_conv_client) as voix_duree_conv_client -- Durée de conversation avec un client
				, sum(voix_duree_consult_emise) as voix_duree_consult_emise -- Durée de consultation émise
				, sum(voix_duree_phase_init) as voix_duree_phase_init -- Durée de la phase d'initialisation
				, max(voix_duree_comm_entrante) as voix_duree_comm_entrante -- Durée de communication entrante
				, max(voix_duree_comm_sortante) as voix_duree_comm_sortante -- Durée de communication sortante
				, max(voix_duree_garde) as voix_duree_garde -- Durée de mise en garde	
				
				  from etlnt_tmp_v_type_interac_res typ
					inner join etlnt_tmp_v_duree_interac_res dur 
					  on typ.interaction_resource_id = dur.interaction_resource_id
					  and typ.ixn_res_dest_id = dur.ixn_res_dest_id
				  group by 
					typ.interaction_id
				  , typ.interaction_resource_id  
    )  tmp on irsa.interaction_resource_id = tmp.interaction_resource_id

where 
  isa.media_type_key = 1
GROUP BY 
    irsa.interaction_resource_id
    , isa.interaction_id
	, irsa.INTERACTION_RESOURCE_ORDINAL	
	, isa.media_server_ixn_guid
	, isa.CONNID
	, isa.start_date
	, irsa.resource_group_combination_key
    , irsa.PREV_IRF_ID 
	, irsa.last_mediation_segment_id
    , irsa.ressource_key
	, irsa.resource_name
    , irsa.resource_type_code
    , irsa.resource_subtype
    , irsa.start_date
    , irsa.end_date  
    , isa.MEDIA_TYPE_KEY
    , irsa.media_name
    , isa.interaction_type
    , irsa.technical_result
    , isa.source
    , isa.target
    , isa.status 
    , irsa.resource_role_code
    , irsa.place_name	
  , irsa.ud_service_name
  , irsa.sous_type_target
  , irsa.ud_list_cibles
  , irsa.ud_list_fa
  , irsa.ud_gim_cible
  , irsa.ud_fa_flux
  , irsa.ud_dnis
  , irsa.ud_ani
  , irsa.ud_agent
  , irsa.ud_msisdn
  , irsa.ud_rona
  , irsa.ud_list_service
  , irsa.ud_list_fs
  , irsa.UD_SERVICE_INIT
  , irsa.UD_SERVICE_ANTE
  , irsa.dispositioncode
  , irsa.ideforce
  , irsa.nom_contact
  , irsa.ud_num_compte
  , irsa.ud_cible
  , irsa.ud_code_vip
  , irsa.ud_dissu_action
  , irsa.prenom_contact
  , irsa.contactid
  , irsa.interactionid
  , irsa.ud_service_prec
  , irsa.ud_ewt
  , irsa.NUM_NOIR
  , irsa.ud_choix_svi
  , irsa.ud_gim_site
  , irsa.ud_horaire
  , irsa.ud_nom_flux
  , irsa.ud_ident_type
  , irsa.sous_type
  , irsa.type
  , irsa.ud_call_result
  , irsa.ud_gim_liste_site
  , irsa.ud_nom_svi
  , irsa.ud_bandeau
  , irsa.ud_dissu_type
  , irsa.ud_priorite
  , irsa.ud_id_profil_routage
  , irsa.ud_distrib
  , irsa.ud_nom_presta
  , irsa.UD_MODE_TRANSFERT
  , irsa.UD_TRANSFERT
  , irsa.ud_multi_contact
  , irsa.UD_NI  
  , irsa_dest.mandora_service_name
  , irsa.MANDORA_SERVICE_NAME
  , irsa.RESULT_REASON_CODE
  , sk.RESOURCE_SKILL_FACT_KEY
  , irsa.last_vqueue
  , irsa_parent.RESOURCE_ROLE_CODE
  , irsa_dest.resource_role_code
  , irsa_grand_parent.ud_service_name
  , irsa_dest_dest_trf_srv_acc.LAST_VQUEUE
  , irsa_dest_dest_trf_srv_acc.UD_TRANSFERT
  , irsa_dest_dest_trf_srv_acc.UD_TRANSFERT
  , irsa_dest_dest_trf_srv_acc.UD_MODE_TRANSFERT
  , irsa_dest_dest_trf_srv_acc.RESOURCE_ROLE_CODE
  , irsa_dest.LAST_VQUEUE
  , irsa_dest.UD_TRANSFERT
  , irsa_dest.UD_MODE_TRANSFERT
  , irsa_dest.interaction_id
  , irsa_dest.RESOURCE_TYPE_CODE
  , irsa_first.place_name