Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Urtigao

groupy by com soma de datas

Recommended Posts

boa tarde,

 

criei uma tabela contendo os campos data, hora_entrada e hora saida.

 

o intuito é fazer um controle de tempo trabalhado, podendo ter várias marcações de entrada e saída em um dia.

 

com o subtime eu consigo calcular o tempo trabalhado de um registro, porem qdo uso com "group by data" apenas uma marcação por data é calculada.

 

select subtime(hora_saida,hora_entrada) , data from tb_horario group by data

 

tentei colocar um sum nos campos de hora:

 

select sum(subtime(hora_saida,hora_entrada)) , data from tb_horario group by data

 

funcionou, porém o formato retornado foi algo como:

 

08:10 retornou 81000

 

com um time_format o problema foi contornado:

 

select time_format(sum(subtime(saida,entrada)),'%H:%i'), data from tb_horario group by data

 

mas houve casos em que o valor retornou algo como:

 

86900 e 48600

 

usando uma analogia com o 81000 os valores em hora deveriam ser 8:69:00 e 4:86:00, nestes dois casos retornam null na formatação de data.

 

o "correto" seria o mysql retornar 90900 e 52600 respectivamente, ou seja, com o time_format deveriam retornar 09:09:00 e 5:26:00.

 

alguém sabe como posso fazer para que eu consigo o que desejo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Urtigao, eu posso estar falando besteira, mas eu acho q SUM() eh uma funçao meramente matematica e portanto incapaz de somar corretamente datas, jah q teoricamente pra ele 100 segundos seriam 1 minuto.

 

A soluçao entao pro seu problema seria transformar tudo em segundos antes de somar, pq entao em segundos ele faria a conta corretamente , e eh necessario a subquery pq q eu saiba a funçao de agrgação deve ficar sempre por cima de todas por motivos obvios , gerando assim uma subquery para converter de volta de segundos para hora normal

 

o SQL seria algo assim

 

select sec_to_time(segundos) , data

from (

select

sum(time_to_sec(subtime(saida,entrada))) as segundos , data

from

tb_horario group by data

) as abc

 

 

Espero ter ajudado, mas agora fica a minha duvida, aparentemente seu sistema soh trabalha com horas, mas e se o funcionario virar a noite trabalhando?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.