2017-09-04 38 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

相关问题