Consulta com total de horas

Boa tarde a todos, tenho uma consulta onde tenho uma coluna de horas e preciso totalizar esta coluna alguém ja fez algo parecido qual o procedimento?
obrigado!

existem funções sql que fazem isso.

Qual, quais?

Joaquim, segue um trecho de código da primeira aplicação que fiz no SC, ainda na V4 que conciliar as horas trabalhadas na execução de demandas:

[code]sc_lookup(contrato, “select CON_QdadeHora, CON_ValorHora from tab_contrato where (Usuario_ID = ‘$usuario’) limit 0,1”);

{Hora} = {contrato[0][0]};
{Valor} = {contrato[0][1]};
{Total} = {Hora} * {Valor};

sc_lookup(demandas, "
SELECT sum(DEM_Horas) as DEM_TotalConcluido from tab_demanda
WHERE (DEM_CodigoUsuario = ‘$usuario’) AND (month(DEM_DataConclusao) = month(now()))
");

{TotalDemandas} = {demandas[0][0]};
{FaltaHora} = {Hora} - {TotalDemandas};
{FaltaMinuto} = {FaltaHora} * 60;

No primeiro lookup busco a quantida de horas do cunsultor e quanto custa cada hora deste consultor.
No segundo, na sentença SQL uso SUM para somar as horas registras em casa demanda do consultor X até data atual.[/code]

Bom dia Srs,

Ainda não entendi como fazer o que Joaquim solicitou, é uma coisa que também preciso e já tentei e não consegui. Desenvolvi um sistema fora do scriptcase que cadastra hora inicio e hora fim por funcionário e gravando também a diferença dos campos, ou seja, o total de horas por registro. Gostaria agora de conseguir exatamente o que Joaquim solicitou, em uma aplicação consulta pelo SC somar esse campo total_horastrab, mostrar a soma de horas trabalhadas por funcionários, isso pelo SC.

Desde já agradeço.

Welington Santos

A logica … procura a funcao no mysql pra retornar o campo ja em segundos no banco.

Ex: TIME_TO_SEC() … porque ai eh so fazer uma consulta sumarizando esse campo.
Depois vc teria que converter para o formato normal.

Olá diogo,

Agradeço a ajuda, tentei sim usar:

SELECT sec_to_time( sum( time_to_sec(campo) ) )
FROM tabela
WHERE campo <> ‘’
GROUP BY campo

Todavia o limite para as horas é 838:59:59, a consulta em que o usuário ultrapassa esse valor, aparece esse valor aí. Li que seria em função da versão do mysql, todavia no meu computador já atualizei e nada, sempre a mesma coisa. Se souber algo que resolva isso. Desde já agradeço.

Welington Santos

Ja que talvez o mysql esteja estourando esse limite, sugeriria … fazer no php no caso:

consulta ser apenas:

SELECT
sum( time_to_sec(campo) ) as horas_trabalhadas
FROM tabela
WHERE campo <> ‘’
GROUP BY campo

e quando for exibir o valor, tentar converter de segundos para time … nao sei decorado se php teria essa função, mas olharias as funções de data do php.

se fosse uma consulta, bastava ser algo tipo no onRecord:

{campo_horas} = converte_segundos_pra_time({campo_horas});

e ia funcionar tranquilo, pra vc nao depender do banco :slight_smile:
Apenas uma sugestão para voce seguir em frente trabalhando :slight_smile:

Valeu Diogo,

Agradeço sua boa vontade em ajudar, vou ver o que faço, se eu conseguir algo interessante para todos, posto aqui.

Atenciosamente,

Welington Santos

Prezados,

A função descrita nas mensagens anteriores:

SELECT sec_to_time( sum( time_to_sec(campo) ) )
FROM tabela
WHERE campo <> ‘’
GROUP BY campo

Funcionou perfeitramente no servidor net. Creio que o problema deve ser a atualização ou não do servidor mysql local meu. Assim podem usar que fuciona nas aplicações na net.

Welington Santos

Indo mais adiante…conseguindo totalizar essa coluna, como faço para coloca-la junto com a totalização abaixo, sendo que a coluna hora não aparece disponivel no SELECIONE CAMPOS da TOTALIZAÇÃO (sendo que é uma coluna do banco tipo TIME) ??? ou seja gostaria que que a soma dessas horas saissem na totalização do final da consulta;

SEGUE COMO ESTÁ MEU SELECT (banco Mysql)

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(hora_adic_atendimento))) AS sum_hora_adic_atendimento FROM adm_os WHERE (STATUS <> ‘C’ AND id_pagamento <> ‘2’ AND id_pagamento <> ‘5’) AND ( id_cliente = 1 AND data_atendimento BETWEEN ‘2010-11-01’ AND ‘2010-11-31’ ) AND id_cliente = 1

Enfim, gostaria que o valor que está do lado direito desta tela, fosse para a TOTALIZAÇÃO E O RESUMO ABAIXO.

no banco está saindo a soma CORRETA, como faço pra colocar esse resultado no final da minha consulta (totalização) ???

Um outro problema parecido mais a logica e o resultado são os mesmos para os 2… no resumo saiu as linhas que eu queria (mais com valores de totalização incorretos) vide tela abaixo:

Quero chegar nesse resultado de resumo onde, lembrando que o valor e quantidade de contrato estão em outra tabela (InnerJoin adm_os (Ordem de Serviços) e adm_clientes (Cadastro de Clientes) onde está o valor e a quantidade de contratos que esse cliente possui. Exatamente igual ao resultado abaixo:

Alguem sabe como fazer isso ???