У меня есть таблица, в которой содержатся события для изменения состояния технического обслуживания. Это образец данных:
id date event
234 2009-04-22 10:00:00 Service Request
234 2009-04-22 10:02:00 Service Approbation
234 2009-04-22 10:03:00 Service Asignation
234 2009-04-22 10:40:00 Service Fulfilled
...
В отчете мне нужно показать время, потраченное на каждый элемент
id time
234 40 minutes
235 37 minutes
...
По сути, я делаю DATEDIFF, как это:
SELECT ...
, DATEDIFF(SECOND,
(SELECT TOP 1 date FROM event_table ev WHERE ev.item = itm.id AND event = 1 ORDER BY date ),
(SELECT TOP 1 date FROM event_table ev WHERE ev.item = itm.id AND event = 4 ORDER BY date DESC)
), ...
FROM item_table itm
WHERE ...
Теперь я должен реализовать новое состояние. Задержка и повторная активация службы, но это время не должно учитываться при расчете общего количества времени, потраченного на эту услугу.
id date event
234 2009-04-22 10:00:00 Service Request
234 2009-04-22 10:02:00 Service Approbation
234 2009-04-22 10:03:00 Service Asignation
234 2009-04-22 10:07:00 Service Delayed -- new state
234 2009-04-22 10:37:00 Service Reactivated -- new state
234 2009-04-22 10:40:00 Service Fulfilled
...
Доклад
id time
234 10 minutes -- Substract 30 minutes between Delay and Reactivation
235 26 minutes
...
Задержка и повторная активация могут происходить в разное время для любого элемента.
Я знаю, что могу сделать это с помощью курсора, но мне кажется это хакерским, есть ли способ рассчитать это при подходе на основе множеств?