And*_*rew 15 mysql sql aggregate-functions
所以我有一组看起来像这样的结果:
SELECT User_ID, StartTime, EndTime, TIMEDIFF(EndTime, StartTime) AS TimeDiff
FROM MyTable
------------------------------------------------------------------
| User_ID | StartTime | EndTime | TimeDiff |
------------------------------------------------------------------
| 1 | 2010-11-05 08:00:00 | 2010-11-05 09:00:00 | 01:00:00 |
------------------------------------------------------------------
| 1 | 2010-11-05 09:00:00 | 2010-11-05 10:00:00 | 01:00:00 |
------------------------------------------------------------------
| 2 | 2010-11-05 06:30:00 | 2010-11-05 07:00:00 | 00:30:00 |
------------------------------------------------------------------
| 2 | 2010-11-05 07:00:00 | 2010-11-05 09:00:00 | 02:00:00 |
------------------------------------------------------------------
| 2 | 2010-11-05 09:00:00 | 2010-11-05 10:00:00 | 01:00:00 |
------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
现在我需要通过User_ID和SUM()TimeDiff 对结果进行分组.如果我添加一个GROUP BY子句,它不是SUM()TimeDiff(我不希望它).我怎样才能SUM()为每个用户提供TimeDiff?
OMG*_*ies 37
使用:
SELECT t.user_id,
SEC_TO_TIME(SUM(TIME_TO_SEC(t.endtime) - TIME_TO_SEC(t.starttime))) AS timediff
FROM MYTABLE t
GROUP BY t.user_id
Run Code Online (Sandbox Code Playgroud)
脚步:
根据样本数据,我刚才建议:
SELECT t.user_id,
TIMEDIFF(MIN(t.startdate), MAX(t.enddate)) AS timediff
FROM MYTABLE t
GROUP BY t.user_id
Run Code Online (Sandbox Code Playgroud)
注意:如果您使用datetime,则此代码中存在错误.TIME_TO_SEC仅转换时间段,因此如果时钟超过午夜,您将得到大的负数.使用UNIX_TIMESTAMP代替总和.SEC_TO_TIME的值也大于3020399秒,例如SELECT TIME_TO_SEC(SEC_TO_TIME(3020400)); 如果你看到这个值838:59:59你已达到最大值,可能只需要除以3600就可以显示小时数.
| 归档时间: |
|
| 查看次数: |
23701 次 |
| 最近记录: |