2017-09-04 77 views
0

我有一個表,其中列出了playerID以及startDateendDate列。這些是時間戳。計算多個時間戳之差的總和

例如

playerID startDate    endDate 
1   2017-06-01 12:00:00  2017-06-01 12:05:00 
1   2017-06-01 13:30:00  2017-06-01 13:33:00 
1   2017-08-04 14:57:00  0000-00-00 00:00:00 

我想運行一個查詢來獲得秒startDateendDate之間的總數爲特定的球員。如果endDate0000-00-00 00:00:00那麼我應該使用當前時間。

這是我曾嘗試:

select 
    IF(endDate = '0000-00-00 00:00:00', CURRENT_TIMESTAMP, endDate) as finishDate, 
    sum((startDate-finishDate)) as timeTaken 
from table where playerID=1 group by playerID 

這有兩個問題。我不認爲我可以使用finishDate,因爲我收到未知的列錯誤。我也想要playerID爲1的所有行的總和

回答

2

MySQL有一個方便的功能TIMESTAMPDIFF,它可以計算各種單位(包括秒)中兩個時間戳之間的差異。我們可以簡單地聚合每個玩家並且使用CASE表達式將當前時間戳替換(有點奇怪的)零時間戳,來總結開始和結束時間戳的差異。

SELECT 
    playerID, 
    SUM(TIMESTAMPDIFF(SECOND, 
         startDate, 
         CASE WHEN endDate = '0000-00-00 00:00:00' 
          THEN CURRENT_TIMESTAMP ELSE endDate END)) AS timeTaken 
FROM yourTable 
GROUP BY playerID 

編輯:我不知道是什麼0000-00-00 00:00:00在你的表是做什麼,但我寧願使用類似NULL表示這是不知道的結束時間戳。這也會使代碼更好一些,例如我們可以使用以下方法來檢查未知結束時間戳:

COALESCE(endDate, CURRENT_TIMESTAMP) 
+0

非常好,非常感謝 – Chris