我有两个表,Case和CaseEvents。
事件基本上是用户更新案例,并且有许多不同类型的事件。
我有一个KPI,两个这些事件(不同类型)必须在3分钟内完成 - 响应时间。
响应时间是通过从EventTypeRef 2 OR EventTypeRef 3中的日期减去EventTypeRef 1中的日期来计算的。
我将所需的结果包含在下表中。
道歉,如果这很简单,我是一个正确的新手,在网上找不到类似的东西(虽然我的搜索中可能使用了错误的术语)。谢谢你的帮助。
我正在使用SQL Server 2005
'Case table'
----------
CaseRef | CaseNo
1 | 1001
2 | 1002
CaseEvents table
----------------
CaseRef | EventType | EventStartDate | EventTypeRef
1 | 'LTE Detected' | 01/11/2013 09:05:36 | 1
1 | 'Ambulance called' | 01/11/2013 09:06:27 | 2
2 | 'LTE Detected' | 02/11/2013 09:11:22 | 1
2 | 'Patient will call ambulance' | 02/11/2013 09:13:01 | 3
1 | 'Case updated' | 01/11/2013 09:09:34 | 4
1 | 'Case marked complete' | 01/11/2013 09:13:34 | 5
Desired result
--------------
CaseNo | LTEDetected | 'LTE Acted On' | 'Response time' |
1 | 01/11/2013 09:05:36 | 01/11/2013 09:06:27 | 00:00:51 |
2 | 02/11/2013 09:11:22 | 02/11/2013 09:13:01 | 00:01:39 |
答案 0 :(得分:0)
您可以在聚合中添加CASE
语句,因此您只需检查您感兴趣的事件类型。
SELECT c.CaseNo,
LTEDetected = MIN(CASE WHEN ce.EventTypeRef = 1 THEN ce.EventStartDate END),
LTEActedOn = MIN(CASE WHEN ce.EventTypeRef IN (2, 3) THEN ce.EventStartDate END),
Responsetime = DATEDIFF(SECOND,
MIN(CASE WHEN ce.EventTypeRef = 1 THEN ce.EventStartDate END),
MIN(CASE WHEN ce.EventTypeRef IN (2, 3) THEN ce.EventStartDate END)
)
FROM Case c
INNER JOIN CaseEvents ce
ON c.CaseRef = ce.CaseRef
GROUP BY c.CaseNo;
<强> Example on SQL Fiddle 强>
答案 1 :(得分:0)
select CaseRef
, datediff(second, StartDt, EndDt) as ResponseTime
from (
select CaseRef
, max(case when EventTypeRef = 1 then EventStartDate end) as StartDt
, min(case when EventTypeRef in (2,3) then EventStartDate end) as EndDt
from CaseEvents
group by
CaseRef
) as SubQueryAlias