Soma de campo time

Pessoal, já tentei de várias formas, mas não obtive sucesso. Gostaria da ajuda de vocês para solucionar este problema. A situação é a senguinte: Gostaria de somar um campo “Duração” que é do tipo TIME e colocar como soma em um relatório, onde o mesmo é totalizado por técnico.

E sua dificuldade esta onde?

Em calcular?

Por no relatório?

      Caro George, agradeço sua atenção. Minha dificuldade esta em transformar o campo "tempo" que o select coloca como decimal em um campo hora, uma vez que o select foi escrito da seguinte forma:    
                                                   SUM(TIME_TO_SEC(TEMPO_ATEND)) AS tempo,
      Com isso ele soma todos os  tempos de atendimento do campo "TEMPO_ATEND"  transformando em segundos e coloca o resultado no campo criado "tempo", só que o fato de ser um campo tipo decimal ele não aceita qualquer transformação em HORA no select, como sugere alguns posts, tais como:  
                                                   SEC_TO_TIME(SUM(TIME_TO_SEC(TEMPO_ATEND))) AS TEMPO,
      Assim sendo, preciso encontrar uma maneira para transformar o conteúdo do campo tempo em H:i:s.

e que o mesmo apareça na coluna do relatório, totalizando por dia e pelo período estabelecido.

Eduardo

Pega a parte inteira do campo e

$hours = floor($tempo / 3600);
$seconds -= $hours * 3600;
$minutes = floor($seconds / 60);
$seconds -= $minutes * 60;

$minutes = str_pad( $minutes, 2, ‘0’, STR_PAD_LEFT );
{total} = $hours.’:’.$minutes;

George, boa tarde!

Obrigado pela sua presteza e colaboração. Como sou novato, podemos dizer assim, no desenvolvimento com essa ferramenta, também é parte da dúvida o local de colocar esse código. Coloco em “Eventos/OnRecord”? Isso fará com que até o total seja convertido? Como mencionei antes, o campo já é apresentado no detalhe da consulta, é totalizado por dia e pelo período solicitado, o fato é que tudo é apresentado em segundos. Eu já vi alguns cálculos fazendo a transformação para hora e estava com dificuldades, com sua ajuda o processo está mais claro. Mas ainda fica a dúvida das questões acima. Independente de qualquer coisa vou fazer os testes com a sua orientação. Caso eu esteja enganado quanto ao local, por favor, avise-me.

Abraços!

Eduardo

Boa tarde,

Qual a definição do campo {total}?

Caro George, bom dia!

Vou colocar abaixo o comando SQL para que vc entenda melhor:

SELECT
COUNT(CD_REGATEND) AS total,
DATE(DATAREG) AS data_atend,
usuarioid,
HORA_INI,
HORA_FIM,
TEMPO_ATEND,
SUM(TIME_TO_SEC(TEMPO_ATEND)) AS tempo,
SIGLA_UNIDADE,
STATUS,
TIPO_DE_EQUIPAMENTO,
LOGIN_CLI,
CD_TIPO_PROBLEMA,
CD_DISU,
CD_SITUACAO,
PROBLEMA,
CD_REGATEND
FROM
REGATEND
GROUP BY CD_REGATEND, usuarioid

De certa forma o problema esta resolvido com a linha abaixo, aproveitei sua idéia e coloquei em uma linha, uma vez que a aplicação não aceitou a atribuição " $seconds = {tempo};" , e da forma que esta abaixo ficou realizando a transformação. Só falta colocar os zeros a esquerda para hora e para segundos.

{tempo} = floor({tempo}/3600).’:’.({tempo}-(floor(floor({tempo}/3600))*3600))/60;

Sua contribuição foi muito importante.

Obrigado!

Eduardo

Utilize

$seu_campo = str_pad( $seu_campo , 2, ‘0’, STR_PAD_LEFT );

Para colocar zeros a esquerda

http://php.net/manual/pt_BR/function.str-pad.php

Caro George, bom dia!

O comando final ficou:
{tempo} = str_pad(floor({tempo}/3600), 2, ‘0’, str_pad_left).’:’.str_pad(({tempo}-(floor(floor({tempo}/3600))*3600))/60, 2, ‘0’, str_pad_left);
E esta funcionando redondo.
A próxima etapa é colocar esse comando no campo que totaliza a soma.

Mais uma vez obrigado!
Eduardo

Bom dia Eduardo, estou com um problema parecido com o seu se não for o mesmo, poderia me ajudar? vc conseguiu colocar o resultado da soma na totalização da consulta?

Caros, eu teve esse problema também e resolvi o mesmo levando hora a segundos sempre, depois sumo os segundos e no momento de mostrar o total faço a conversão de total de segundo a hora em formato ##:##:##.

Eu uso Postgres 13 e todas minhas funções e regras de negocio ficam no banco de dados, se alguém tivesse inteires posso partilhar sem problemas.

Afonso2013, obrigado!
Eu uso o MYSQL tenho interesse em entender como vc fez na totalização para converter os segundo em hora e mostrar, eu convertir para segundos e agora o que eu faço?

Caro, eu fiz no Postgres uma função que entras a hora em formato ##:##:## e te devolve os segundos desde a media noite (Ex. 10:25:10 = 37510 segundos). Ao final sumo todos os segundos e depois tenho outra função que a partir dos segundos, qualquer valor devolve as horas a que corresponde em formato ##:##:##.
As funções são simples partindo do principio que cada minuto = 60 segundos e que cada hora tem 60 minutos.
Por exemplo: 23:59:59 = 86399 (um dia), e se a soma é equivalente a 125200 = 34:46:46

Nada mais, este é o procedimento, está feito em Postgres pois para mim programar em “plpgsql” é mais fácil que em PHP ou Javascript, alias sou também do critério que todo calculo ou quase todo deve ser feito em base de dados e não em APP