2013-11-28 40 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