microsoft sql server datediff多个日期

时间:2011-09-28 20:41:38

标签: sql-server-2008

我需要根据唯一ID找到2个日期(日期时间类型)之间的时间长度。例如,我有以下数据:

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

我需要根据之前的通话日期(开始时间)找到每个ID的所有CallID的时间长度。例如,我需要ID 1的所有呼叫的时间长度(CallID 67 - CallID 56和CallID 70 - CallID 67等)。

我知道我需要一个通过ID来查找该ID的CallID的循环,但是我还需要一个临时表来组织CallID吗?

任何建议将不胜感激。谢谢。

1 个答案:

答案 0 :(得分: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