首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算多个时间戳之间的差和

问计算多个时间戳之间的差和
EN

Stack Overflow用户
提问于 2017-09-04 14:01:24
回答 1查看 387关注 0票数 0

我有一个表,其中列出了playerID以及一个startDate和endDate列。这些是时间戳。

例如:

代码语言:javascript
复制
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

我正在尝试运行一个查询,以获得特定播放器的startDate和endDate之间的总秒数。如果endDate是0000-00-00 00:00:00,那么我应该使用当前时间。

以下是我尝试过的:

代码语言:javascript
复制
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的所有行的和

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-04 14:07:32

MySQL有一个方便的函数TIMESTAMPDIFF,它可以以不同的单位计算两个时间戳之间的差值,包括秒。我们可以简单地对每个玩家进行聚合,并将起始时间戳和结束时间戳之和,使用CASE表达式用当前时间戳替换(有点奇怪)的零时间戳。

代码语言:javascript
复制
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这样的东西来表示一个未知的结束时间戳。这也会使代码更好一些,例如,我们可以使用下面的代码来检查未知的结束时间戳:

代码语言:javascript
复制
COALESCE(endDate, CURRENT_TIMESTAMP)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46038704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档