汇总时间戳返回不正确的值和格式

时间:2014-01-31 17:26:11

标签: mysql datetime time type-conversion aggregate-functions

我希望在给定时间内拉出预定时间。我们的开始和结束计划时间是日期时间,因此我将它们转换为时间戳。当我不总结它们时,一切看起来都是正确的,但是当我在一段时间内对它们求和时,输出不是时间戳格式且数字不正确。

我正在使用的查询:

select sal.public_name, sum(timediff(timestamp(end_time), timestamp(start_time)))
from bi.support_agents_list sal
join bi.support_sp_shifts_scheduled ss
on ss.agent_sp_id = sal.sp_id
join bi.support_sp_shifts s 
on s.pk_id = ss.pk_id
where date(start_time) between '2014-01-29' and '2014-01-31'
group by sal.public_name

我得到的一些结果示例:

代理1:53000 - 应该是5.5小时或5:30

代理人2:196000 - 应该是20小时

对此有何想法?我希望我的输出是一小时计数,所以5小时30分钟被格式化为5.5而不是5:30。

2 个答案:

答案 0 :(得分:0)

尝试这个而不是总和

   date_format(timediff(timestamp(end_time), timestamp(start_time)), 
   '%k hours, %i minutes, %s seconds') as thesum
像那样

 select sal.public_name, 
   date_format(timediff(timestamp(end_time), timestamp(start_time)), '%k hours, %i minutes, %s seconds') as thesum
 from bi.support_agents_list sal

答案 1 :(得分:0)

使用datetime sum(datetime)进行聚合计算时,结果不符合您的预期(=无法求和日期时间)。最好将日期时间转换为聚合函数之前的秒数,然后将其转换回时间。

您的聚合函数调用将类似于:

select sec_to_time(sum(unix_timestamp(end_time)-unix_timestamp(start_time)))

请注意,您可以达到数据类型可以包含的最大值,并且unix_timestamp从1970年开始。