2011-09-28 65 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