我有一个表格,其中列出了list(zip(index3, fcs_dates))[:5]
[(Timestamp('2016-01-01 00:00:00', freq='MS'),
Timestamp('2016-02-01 00:00:00', freq='MS')),
(Timestamp('2016-01-01 00:00:00', freq='MS'),
Timestamp('2016-03-01 00:00:00', freq='MS')),
(Timestamp('2016-01-01 00:00:00', freq='MS'),
Timestamp('2016-04-01 00:00:00', freq='MS')),
(Timestamp('2016-02-01 00:00:00', freq='MS'),
Timestamp('2016-03-01 00:00:00', freq='MS')),
(Timestamp('2016-02-01 00:00:00', freq='MS'),
Timestamp('2016-04-01 00:00:00', freq='MS'))]
以及playerID
和startDate
列。这些是时间戳。
e.g。
endDate
我正在尝试运行查询以获取特定玩家的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
这有两个问题。我不认为我可以使用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
,因为我收到了一个未知的列错误。我还想要所有行的总和为playerID 1
答案 0 :(得分: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)