Consulta com total de horas

(joaquim) #1

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!

(Haroldo) #2

existem funções sql que fazem isso.

(joaquim) #3

Qual, quais?

(Cleyton Euler) #4

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]

(wetsite) #5

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

(Diogo Toscano) #6

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.

(wetsite) #7

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

(Diogo Toscano) #8

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:

(wetsite) #9

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

(wetsite) #10

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

(Eduardo Alves) #11

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) ???

(Eduardo Alves) #12

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 ???