2015-05-20 2 views
1

Мне нужно сообщить о продолжительности того, сколько длинных инцидентов находилось в ожидании/назначено/в состоянии выполнения для каждой группы поддержки. Данные хранятся в двух таблицах; ASSIGNMENT_LOG содержит историю передачи назначений между группами поддержки, а STATUS_LOG содержит историю изменений статуса инцидента.Продолжительность присвоений по статусу и группе

Прилагается пример данных одного инцидента. Пожалуйста, посмотрите и сообщите, как действовать.

WITH slog AS (
select '000000000266702' REQUEST_ID, 'INC000000128540' INCIDENT_NUMBER, 'Assigned' INCIDENTSTATUSTEXT, 1431348757 TIMESTAMPSTART,'11.5.2015 15:52:37' STARTTEXT, 1432033832 TIMESTAMPEND,'19.5.2015 14:10:32' ENDTEXT from dual 
union 
select '000000000268200','INC000000128540','In Progress',1432033832,'19.5.2015 14:10:32',1432034915,'19.5.2015 14:28:35' from dual 
union 
select '000000000268205','INC000000128540','Pending',1432034915,'19.5.2015 14:28:35',1432034927,'19.5.2015 14:28:47' from dual 
union 
select '000000000268206','INC000000128540','Assigned',1432034927,'19.5.2015 14:28:47',1432034970,'19.5.2015 14:29:30' from dual 
union 
select '000000000268207','INC000000128540','Pending',1432034970,'19.5.2015 14:29:30',1432034988,'19.5.2015 14:29:48' from dual 
union 
select '000000000268208','INC000000128540','In Progress',1432034988,'19.5.2015 14:29:48',null,null from dual 
), 
alog AS(
select 'INC000000128540' INCIDENT_NUMBER, '000000000103677' REQUEST_ID, 'Helpdesk' ASSIGNED_GROUP, 1431348757 TIMESTAMPSTART, 1431434286 TIMESTAMPEND, '11.5.2015 15:52:37' STARTTEXT,'12.5.2015 15:38:06' ENDTEXT from dual 
union 
select 'INC000000128540','000000000103816','L1',1431434286,1432033740,'12.5.2015 15:38:06','19.5.2015 14:09:00' from dual 
union 
select 'INC000000128540','000000000104352','L2',1432033740,1432033777,'19.5.2015 14:09:00','19.5.2015 14:09:37' from dual 
union 
select 'INC000000128540','000000000104353','L1',1432033777,1432034927,'19.5.2015 14:09:37','19.5.2015 14:28:47' from dual 
union 
select 'INC000000128540','000000000104354','L2',1432034927,1432034980,'19.5.2015 14:28:47','19.5.2015 14:29:40' from dual 
union 
select 'INC000000128540','000000000104355','L1',1432034980,null,'19.5.2015 14:29:40',null from dual 
) 
SELECT 
alog.*, slog.* 
from alog, slog 
where alog.incident_number = slog.incident_number 
order by alog.request_id, slog.request_id 
+0

Вы имеете в виду общее время в каждом состоянии по нескольким запросам; так что комбинированное время двух незавершенных этапов в вашем примере? Возможно, вы можете добавить вывод, который вы ожидаете от этих данных? (Не важно, но почему вы сохраняете дату/время как цифры epoch * и * текстовую строку, а не один столбец timestamp?) –

+1

, пожалуйста, опишите лучше, что вы хотите – niyou

+0

Например, ничего из предоставленных данных не называется как «группа поддержки». –

ответ

0

Я думаю, вы пытаетесь определить перекрытия между диапазонами временных меток в двух таблицах. И затем, выполнив это, вычислите продолжительность каждого перекрывающегося периода. Это может заставить вас начать:

select a.incident_number, 
    a.assigned_group, 
    s.incidentstatustext, 
    greatest(s.timestampstart, a.timestampstart) as overlapstart, 
    least(nvl(s.timestampend, 
     86400*(cast(sys_extract_utc(systimestamp) as date) - date '1970-01-01')), 
    nvl(a.timestampend, 
     86400*(cast(sys_extract_utc(systimestamp) as date) - date '1970-01-01'))) 
    as overlapend, 
    least(nvl(s.timestampend, 
     86400*(cast(sys_extract_utc(systimestamp) as date) - date '1970-01-01')), 
    nvl(a.timestampend, 
     86400*(cast(sys_extract_utc(systimestamp) as date) - date '1970-01-01'))) 
    - greatest(s.timestampstart, a.timestampstart) as duration, 
    -- just to see where values are coming from 
    a.timestampstart as a_start, 
    a.timestampend as a_end, 
    s.timestampstart as s_start, 
    s.timestampend as s_end 
from alog a 
join slog s on s.incident_number = a.incident_number 
and (a.timestampend is null or s.timestampstart <= a.timestampend) 
and (s.timestampend is null or s.timestampend >= a.timestampstart) 
order by incident_number, overlapstart; 

Что с данными выборки получает:

INCIDENT_NUMBER ASSIGNED INCIDENTSTA OVERLAPSTART  OVERLAPEND  DURATION  A_START   A_END  S_START   S_END 
--------------- -------- ----------- -------------- -------------- -------------- -------------- -------------- -------------- -------------- 
INC000000128540 Helpdesk Assigned  1431348757  1431434286   85529  1431348757  1431434286  1431348757  1432033832 
INC000000128540 L1  Assigned  1431434286  1432033740   599454  1431434286  1432033740  1431348757  1432033832 
INC000000128540 L2  Assigned  1432033740  1432033777    37  1432033740  1432033777  1431348757  1432033832 
INC000000128540 L1  Assigned  1432033777  1432033832    55  1432033777  1432034927  1431348757  1432033832 
INC000000128540 L1  In Progress  1432033832  1432034915   1083  1432033777  1432034927  1432033832  1432034915 
INC000000128540 L1  Pending   1432034915  1432034927    12  1432033777  1432034927  1432034915  1432034927 
INC000000128540 L2  Pending   1432034927  1432034927    0  1432034927  1432034980  1432034915  1432034927 
INC000000128540 L1  Assigned  1432034927  1432034927    0  1432033777  1432034927  1432034927  1432034970 
INC000000128540 L2  Assigned  1432034927  1432034970    43  1432034927  1432034980  1432034927  1432034970 
INC000000128540 L2  Pending   1432034970  1432034980    10  1432034927  1432034980  1432034970  1432034988 
INC000000128540 L1  Pending   1432034980  1432034988    8  1432034980     1432034970  1432034988 
INC000000128540 L1  In Progress  1432034988  1432205373   170385  1432034980     1432034988    

Я предположил, что вы хотите видеть каждое перекрывающееся время по отдельности, а не суммируется присвоенной группой и статусом. Я также работал с датами эпохи (надеюсь, UTC), а не текстовыми версиями, чтобы упростить настройку часового пояса, что необходимо для номинальной даты окончания открытых записей.

Если статус и назначенная группа изменены в одно и то же время, вы получаете больше комбинаций, чем вы действительно хотите, с избыточными, имеющими нулевую продолжительность, поэтому вы можете их устранить. Это легче сделать с подзапроса, что упрощает все это немного так или иначе:

который получает тот же результат для ненулевых длительностей:

INCIDENT_NUMBER ASSIGNED INCIDENTSTA OVERLAPSTART  OVERLAPEND  DURATION 
--------------- -------- ----------- -------------- -------------- -------------- 
INC000000128540 Helpdesk Assigned  1431348757  1431434286   85529 
INC000000128540 L1  Assigned  1431434286  1432033740   599454 
INC000000128540 L2  Assigned  1432033740  1432033777    37 
INC000000128540 L1  Assigned  1432033777  1432033832    55 
INC000000128540 L1  In Progress  1432033832  1432034915   1083 
INC000000128540 L1  Pending   1432034915  1432034927    12 
INC000000128540 L2  Assigned  1432034927  1432034970    43 
INC000000128540 L2  Pending   1432034970  1432034980    10 
INC000000128540 L1  Pending   1432034980  1432034988    8 
INC000000128540 L1  In Progress  1432034988  1432205374   170386 

Продолжительности в секундах, и вы можете преобразовать это в любой формат, который хотите сообщить.

Смежные вопросы