メンテナンスサービスの状態を変更するためのイベントを含むテーブルがあります。これはデータのサンプルです:
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
...
遅延と再アクティブ化は、どのアイテムでもさまざまな時点で発生する可能性があります。
カーソルでこれを実行できることは知っていますが、私にはハッキーに思えます。セットベースのアプローチでこれを計算する方法はありますか?