计算从开始/停止时间戳开始的总运行时间

时间:2010-01-29 15:34:41

标签: sql-server sql-server-2005 tsql

我有一个包含每天时间戳的表,它们代表启动和停止事件。

ID TimeStamp
----------------------
1  2008-01-01 07:00:00
1  2008-01-01 08:15:00
1  2008-01-01 10:00:00
1  2008-01-01 11:00:00
1  2008-01-02 10:30:00
1  2008-01-02 12:00:00

我想计算每天的总运行时间,如下所示:

ID Date       RunningTime
-------------------------
1  2008-01-01 02:15:00
1  2008-01-02 01:30:00

对于我的问题,有没有人有一个很好的T-SQL解决方案?

1 个答案:

答案 0 :(得分:2)

WITH    q AS
        (
        SELECT  *,
                CONVERT(DATETIME, CONVERT(VARCHAR(8), TimeStamp, 112), 112) AS dte,
                ROW_NUMBER() OVER (PARTITION BY id, CONVERT(DATETIME, CONVERT(VARCHAR(8), TimeStamp, 112), 112) ORDER BY TimeStamp) AS rn
        FROM    mytable
        )
SELECT  qb.id, qb.dte, SUM(DATEDIFF(second, qb.TimeStamp, qe.TimeStamp))
FROM    q qb
JOIN    q qe
ON      qe.id = qb.id
        AND qe.dte = qb.dte
        AND qe.rn = qb.rn + 1
WHERE   qb.rn % 2 = 1
GROUP BY
        qb.id, qb.dte

这假设某一天开放的每条记录也应该在同一天关闭。