当前位置: 首页 > 面试题库 >

MySQL:如何对组中的TIMEDIFF()求和?

徐晔
2023-03-14
问题内容

因此,我得到了一组类似于以下内容的结果:

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 |
------------------------------------------------------------------

现在,我需要按User_IDSUM()TimeDiff对结果进行分组。如果我添加一个GROUP BY子句,则它不是SUM()TimeDiff(并且我不希望这样)。如何SUM()为每个用户设置TimeDiff?


问题答案:

使用:

  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

脚步:

  1. 使用TIME_TO_SEC将TIME转换为秒以进行数学运算
  2. 求和
  3. 使用SEC_TO_TIME将秒转换回TIME

基于示例数据,我只是建议:

  SELECT t.user_id,       
         TIMEDIFF(MIN(t.startdate), MAX(t.enddate)) AS timediff
    FROM MYTABLE t
GROUP BY t.user_id

注意:如果您使用日期时间,则此代码中有一个错误。TIME_TO_SEC仅转换时间部分,因此如果时钟经过午夜,则最终会带来很大的负面影响。使用UNIX_TIMESTAMP代替进行总和。另外,SEC_TO_TIME的最大值超过3020399秒,例如SELECT
TIME_TO_SEC(SEC_TO_TIME(3020400));如果您看到此值838:59:59,则您已达到最大值,可能只需要除以3600就可以显示小时数。



 类似资料:
  • 问题内容: 我有一个表,其中包含以下格式的日期时间值: 开始 1/13/2009 7:00:00 AM 结束 1/13/2008 2:57:00 PM 我使用“ str to date”功能将其转换为日期时间格式。 如何计算它们之间的差异?然后将其汇总,以总小时数显示(即一周的总小时数为40:53)。 我正在尝试timediff函数,但结果不总和。 问题答案: 尝试调查和。 您将总结时间戳之间的差

  • 问题内容: 如何通过关联键添加所有列值?请注意,键集是动态的。 输入数组: 所需结果: 问题答案:

  • 问题内容: 我有一些具有相同值的数组,如下所示。 如果值重复,则将相同的总和相加。对于相同的不同,无需求和。 这就是我想要的。 我陷入上述问题。我已经尽力了。但是我得到了错误的结果。我非常感谢任何建议。 问题答案: @Cloud我已根据您的要求提供了功能,感谢@MI对此总和部分进行了研究。

  • 问题内容: 我想要与此等同的流: 该代码实际上并未编译,因为无法将0分配给T类型,但是您可以理解。 问题答案: 这是另一种方法: (不过,总的来说,保罗的回答是减少装箱和拆箱。) 至于 一般而言 ,我认为没有比这更方便的方法了。 我们可以做这样的事情: 但是你总会过夏天。也是有问题的,因为它返回了。上面的方法为一个空的映射抛出一个异常,但是一个空的和应该为0。当然,我们也可以传递0:

  • 问题内容: 我有一个像这样的元组列表(总是成对出现): 我想找到每对中第一项的总和,即: 如何在Python中执行此操作?目前,我正在遍历列表: 我觉得必须有一种更Python化的方式。 问题答案: 与Python 2.3兼容的版本是 或在最新版本的Python中,请参见此答案。 也会做。

  • 我是新来的放心,并试图通过以下机构的职位要求。 JSON有效载荷: 我甚至尝试过以下代码: 有人能帮我吗。 谢啦