2014-01-31 4 views
1

Я ищу, чтобы вытащить запланированные часы за данный период времени. Время начала и окончания расписания - это время, поэтому я преобразовал их в отметки времени. Когда я их не суммирую, все выглядит правильно, но когда я суммирую их за период времени, вывод не находится в формате timestamp, а числа неверны.Суммирование временной метки, возвращающей неправильное значение и формат

Запрос Я использую:

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

попробовать это вместо суммы

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

Спасибо. Когда я это делаю, он работает для одного timediff, но когда я их суммирую, он округляет результат. поэтому для агента 1 он дает мне 5, а не 5,5 или 5:30 – user3258198

+0

, как вы их суммируете, дайте свой пример. –

0

При выполнении агрегатных расчетов с даты и времени суммы (DateTime), то результат не то, что вы ожидаете (= не может подвести DateTimes) , Вам будет лучше конвертировать datetime в несколько секунд до агрегатной функции, а затем преобразовать ее во времени.

Ваш вызов агрегатной функции будет выглядеть примерно так:

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

Имейте в виду, что вы можете достичь максимального значения, что время тип данных может содержать и что UNIX_TIMESTAMP начинается с 1970 года

Смежные вопросы