2011-09-28 91 views
1

我需要根據唯一的ID找到兩個日期(日期時間類型)之間的時間長度。例如,我有以下數據:多個日期的微軟sql server datediff

ID     CallID       Starttime     
1     56        2011-01-04 10:00:00.000 
1     67        2011-03-20 12:20:00.000 
1     70        2011-04-08 15:00:00.000 
2     57        2011-01-14 11:00:00.000 
2     62        2011-02-14 11:00:00.000 
2     64        2011-02-15 11:00:00.000 
2     75        2011-04-14 11:00:00.000 
2     78        2011-05-14 11:00:00.000 

我需要找到時間的長短對所有CallIDs基於先前的贖回日(開始時間)每個ID。例如,我需要所有ID 1呼叫(CallID 67 - CallID 56和CallID 70 - CallID 67等)的時間長度。

我知道我需要一個會通過ID來查找該ID的CallID的循環,但是我還需要一個臨時表,我將組織CallIDs?

任何建議,將不勝感激。謝謝。

+0

您能否以表格格式爲ID 1和2提供所需的輸出? –

回答

3

單程。

;WITH T 
    AS (SELECT ID, 
       CallID, 
       Starttime, 
       ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Starttime) RN 
     FROM YourTable) 
SELECT t1.ID, 
     t1.CallID, 
     t2.CallID, 
     DATEDIFF(HOUR, t1.Starttime, t2.Starttime) 
FROM T t1 
     INNER JOIN T t2 
     ON t1.RN = t2.RN - 1 
      AND t1.ID = t2.ID 
+0

+1,非常漂亮。 –

+0

即使我因爲某些原因無法運行(仍在學習!),這看起來很棒......我將繼續嘗試運行它並檢查此答案。也感謝我的編輯! – WixLove

+0

我終於得到這個工作,它很漂亮。非常感謝! – WixLove