Sou novo por aqui e não tenho muita experiência com sql´s, por este motivo, peço que me ajudem a resolver esta questãozinha, estou o dia todo quebrando a cabeça, pesquisando em diversos lugares da net, mas não acho nada que possa me ajudar, ou eu não estou conseguindo encaixar no meu cenário.
Preciso gerar uma consulta que retorne a diferença entre dois campos do tipo “TimeStamp”, um contém a informação da criação do chamado e o outro contém a informação do encerramento do chamado (ou no caso de ser um chamado que ainda não foi encerrado, ele retorna as informações do sysdate).
Com essa consulta, quero mensurar o tempo médio mensal (do mês corrente) de atendimento dos chamados abertos para a nossa área de TI.
Gerei a consulta abaixo, entretanto, preciso que a diferença dos campos, leve em consideração os dias uteis e as o período entre 08h e 18h, dispensando os finais de semanas e os horários entre 18h01m e 07h59m.
Não sei se está faltando alguma informação, caso esteja, é só pedir que vou colocando aqui.
Desde já, agradeço toda atenção e apoio de todos!
SELECT DISTINCT TO_CHAR(P.STARTDATE, 'DD-MM-YYYY HH24:MI') AS DATAINICIO,
Case
when chamadoti0_.dtencerramento is null then
TO_char(sysdate, 'DD-MM-YYYY HH24:MI')
else
TO_char(chamadoti0_.dtencerramento, 'DD-MM-YYYY HH24:MI')
end AS DATAFIM,
case
when chamadoti0_.dtencerramento is null then
sysdate - P.STARTDATE
else
chamadoti0_.dtencerramento - P.STARTDATE
end as Diferença,
trunc(to_number(substr((chamadoti0_.dtencerramento -
P.STARTDATE),
1,
instr(chamadoti0_.dtencerramento -
P.STARTDATE,
' ')))) dias,
substr((chamadoti0_.dtencerramento - P.STARTDATE),
instr((chamadoti0_.dtencerramento - P.STARTDATE), ' ') + 1,
2) horas,
substr((chamadoti0_.dtencerramento - P.STARTDATE),
instr((chamadoti0_.dtencerramento - P.STARTDATE), ' ') + 4,
2) minutos,
substr((chamadoti0_.dtencerramento - P.STARTDATE),
instr((chamadoti0_.dtencerramento - P.STARTDATE), ' ') + 7,
2) segundos
FROM D_CHAMADOTI CHAMADOTI0_
LEFT OUTER JOIN D_TIPOCLASSIFICACAO TIPOCLASSI4_
ON CHAMADOTI0_.TIPODECHAMADO_NEOID = TIPOCLASSI4_.NEOID
LEFT OUTER JOIN WFPROCESS P
ON CHAMADOTI0_.WFPROCESS_NEOID = P.NEOID
WHERE P.SAVED = 1
AND (P.PROCESSSTATE = 1 OR P.PROCESSSTATE = 0)
and TIPOCLASSI4_.NOMETIPOCLASSIFICACAO = 'TI-Computadores'
and EXTRACT(YEAR FROM P.STARTDATE) = to_char(sysdate, 'YYYY')
and TO_CHAR(P.STARTDATE, 'IW') = (to_char(sysdate, 'IW'))
DATAINICIO DATAFIM DIFERENÇA DIAS HORAS MINUTOS SEGUNDOS
---------------- ---------------- ------------------- ---------- ----- ------- --------
01-04-2013 14:19 01-04-2013 15:19 +000000000 01:00:25 0 01 00 25
01-04-2013 11:40 01-04-2013 11:44 +000000000 00:03:20 0 00 03 20
01-04-2013 11:35 01-04-2013 11:37 +000000000 00:02:19 0 00 02 19
01-04-2013 11:39 01-04-2013 11:43 +000000000 00:03:35 0 00 03 35
02-04-2013 10:15 02-04-2013 10:34 +000000000 00:19:28 0 00 19 28
02-04-2013 16:22 02-04-2013 18:02 +000000000 01:39:40
01-04-2013 10:03 01-04-2013 10:32 +000000000 00:29:01 0 00 29 01
02-04-2013 09:54 02-04-2013 10:08 +000000000 00:13:24 0 00 13 24
01-04-2013 11:04 01-04-2013 11:39 +000000000 00:34:59 0 00 34 59
02-04-2013 10:49 02-04-2013 10:52 +000000000 00:03:16 0 00 03 16
02-04-2013 16:28 02-04-2013 18:02 +000000000 01:34:02
01-04-2013 09:49 01-04-2013 10:33 +000000000 00:43:27 0 00 43 27
02-04-2013 15:00 02-04-2013 15:25 +000000000 00:24:46 0 00 24 46
01-04-2013 09:44 01-04-2013 10:31 +000000000 00:47:39 0 00 47 39
02-04-2013 17:14 02-04-2013 17:38 +000000000 00:23:43 0 00 23 43
02-04-2013 11:20 02-04-2013 11:30 +000000000 00:10:17 0 00 10 17
01-04-2013 09:07 01-04-2013 09:21 +000000000 00:14:12 0 00 14 12
01-04-2013 14:52 01-04-2013 15:07 +000000000 00:15:10 0 00 15 10
02-04-2013 16:21 02-04-2013 17:39 +000000000 01:17:39 0 01 17 39
02-04-2013 16:52 02-04-2013 16:58 +000000000 00:05:38 0 00 05 38