2013-11-28 72 views
2

我有两个表,Case和CaseEvents。从关联表中选择特定事件类型的最新事件日期

事件基本上是一个用户更新案例,并且有很多不同类型的事件。

我有一个KPI的那些事件(不同类型)的有3分钟内已经发生了 - 响应时间

响应时间通过在EventTypeRef 2 OR EventTypeRef 3.

从日期减去EventTypeRef 1的时间计算的I包括在下表中我的期望的结果。如果这很简单,我是一个正确的新手,在网上找不到任何类似的东西(虽然也许我在搜索时使用了错误的术语)。谢谢你的帮助。

我使用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

您使用的是什么DBMS和版本? – GarethD

+0

@GarethD SQLServer 2005 – jjswin

回答

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

+0

谢谢@GarethD - 会让你知道我是怎么得到的:) – jjswin

+0

没有运气,努力让它工作。返回CaseNo和偶尔LTEActedOn,但没有其他人。我相信这肯定是我的错误,但要感谢你的努力。 – jjswin

+0

不确定为什么它不能正常工作,我在SQL小提琴上添加了一个示例。 – GarethD

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 
+0

感谢您的快速响应,我现在就给它一下:) – jjswin