2010-01-29 91 views
2

我有一個包含數每天時間戳的表,他們代表開始和停止事件。從開始計算總運行時間/停止時間戳

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 

我想calcuate每天總運行時間,像這樣:

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

不要任何人有我的問題一個不錯的T-SQL的解決方案?

回答

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 

這裏假定在某一天打開的每條記錄都應當在同一天關閉。

+0

令人印象深刻,這是快!謝謝。 –