我希望在给定时间内拉出预定时间。我们的开始和结束计划时间是日期时间,因此我将它们转换为时间戳。当我不总结它们时,一切看起来都是正确的,但是当我在一段时间内对它们求和时,输出不是时间戳格式且数字不正确。
我正在使用的查询:
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。
答案 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年开始。