Ich habe eine Tabelle, die Ereignisse enthält, um den Status eines Wartungsdienstes zu ändern. Dies ist ein Beispiel von Daten:Set-basierte Berechnung für Ereignistabelle mit Ausnahme eines Ereignisses
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
...
In einem Bericht, ich muss für jedes Element
id time
234 40 minutes
235 37 minutes
...
Grundsätzlich verbrachte Zeit zeigen, ich mache ein DATEDIFF wie folgt aus:
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 ...
Jetzt muss ich einen neuen Zustand implementieren. Verzögerung und Reaktivierung eines Dienstes, aber diese Zeit muss bei der Berechnung der gesamten für diesen Dienst aufgewendeten Zeit nicht berücksichtigt werden.
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
...
Bericht
id time
234 10 minutes -- Substract 30 minutes between Delay and Reactivation
235 26 minutes
...
Die Verzögerung und die Reaktivierung können verschiedene Zeiten für jedes Element auftreten.
Ich weiß, dass ich dies mit einem Cursor tun kann, aber es scheint Hacky für mich, gibt es eine Möglichkeit, dies auf einem Set-basierten Ansatz zu berechnen?
Es scheint, als ob Ihre letzte Ausgabe funktioniert, ich werde überprüfen, danke –
Arbeitete Änderung ereignis_id zu [delay_start] .item auf Unterabfrage –