[firebase-br] Sum campo TIME

Marcos Weimer marcosweimer em gmail.com
Qua Jun 8 13:43:48 -03 2011


Samuel

Seguinte, vou tentar explicar....

tenho uma tabela de agrupamentos, onde tenho um campo datetime que uso para
efetuar a sincronização dos dados com um terminal off-line.

- faço o seguinte select:

select data_criacao_alteracao from agrupamentos
where data_criacao_alteracao is not null

- Tenho como retorno os seguintes registros
15.03.2010 09:49
15.03.2010 09:50
15.03.2010 09:51
15.03.2010 09:52
15.03.2010 09:52

Tudo bem, somando no excel (sum(intervalo)) ou outros programas similares o
retorno é de 1:14 (com arredondamento automatico dos segundos)

errado (em partes), porque a soma é de 49:15:28, ou seja, 2 dias 1 hora 15
minutos e 28 segundos

agora fazendo isso no firebird o resultado esperado requer um trabalho
"extra", vamos converter tudo para segundos e depois transformar tudo
novamente para hora, mais ou menos assim...

SELECT
    (total_segundos/3600) ||':'|| //horas
    ((total_segundos-((total_segundos)/3600)*3600)/60)||':'|| //minutos
    (total_segundos - (total_segundos/3600)*3600 -
((total_segundos-((total_segundos)/3600)*3600)/60)*60 ) //segundos
FROM
(
SELECT
    CAST(SUM(
        EXTRACT( HOUR FROM data_criacao_alteracao ) * 3600 +
        EXTRACT( MINUTE FROM data_criacao_alteracao ) * 60 +
        EXTRACT( SECOND FROM data_criacao_alteracao )
    ) AS INTEGER) AS total_segundos
FROM agrupamentos
where data_criacao_alteracao is not null
)

mais ou menos isso, aqui para mim funcionou a 100%, eu particularmente
tambem não sabia dessa possibilidade (fazer um from em um subselect, eu
faria em procedure, todos os créditos ao thomasz moderador do foram da
activedelphi, onde encontrei depois de uma pesquisa no são google, o
primeiro resultado aponte para ele
http://www.activedelphi.com.br/forum/viewtopic.php?t=29166&sid=07395e0951b593b90085dd42bd98ab28
)


Qualquer coisa posta ae!

falows



Em 8 de junho de 2011 11:22, Samuel M. Basso <samuelbasso em gmail.com>escreveu:

> Bom dia.
>
> O datadiff ele retorna a diferença entre hora inicial e final, mas caso eu
> já tenha um campo hora total como faço para o no SQL somar isso?
>
> Ex: Select SUM(hora_total) from tabela  (Esse exemplo daria erro)
>
>
>
>
>
> 2011/6/7 Marcos Weimer <marcosweimer em gmail.com>
>
> > Brayan
> > Usei apenas como exemplo, o correto seria assim...
> > para somar as horas
> > select sum(datediff(hour, campo_hora_inicial, campo_hora_final)) as Hora
> > from nome_tabela
> >
> > Em 7 de junho de 2011 13:44, Brayan Ciacarone
> > <brayan.cicarone em gmail.com>escreveu:
> >
> > > Bem Marcos,
> > >
> > > da forma como você fez , não retorna o a soma total de um campo TIME.
> > >
> > > Mesmo por que desta forma, o resultada da consulta será diferente a
> cada
> > > segundo
> > >
> > > O Certo seria :
> > >
> > > select
> > >  sum(datediff(hour, cast('0:0' as time), data_criacao_alteracao)) as
> > Hora,
> > >  sum(datediff(minute, cast('0:0' as time), data_criacao_alteracao)) as
> > > minutos,
> > >  sum(datediff(second, cast('0:0' as time), data_criacao_alteracao)) as
> > > segundos,
> > >  sum(datediff(millisecond, cast('0:0' as time),
> data_criacao_alteracao))
> > as
> > > milesegundos
> > > from produtos_clas pc
> > > where pc.codproduto = 1 and pc.codproduto_clas = 1
> > > ______________________________________________
> > > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > > Para saber como gerenciar/excluir seu cadastro na lista, use:
> > > http://www.firebase.com.br/fb/artigo.php?id=1107
> > > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> > >
> >
> >
> >
> > --
> > -=Ma®©oS=-
> > Marcos R. Weimer
> > Puma GTE 1974 Tubarão
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > Para saber como gerenciar/excluir seu cadastro na lista, use:
> > http://www.firebase.com.br/fb/artigo.php?id=1107
> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >
>
>
>
> --
>
>
> Atenciosamente,
>
> *Samuel M. Basso*
> Fone: (54) 3462-5522
> Cel: (54) 8135-3723
> Skype: samuelbasso
> E-mail/MSN: samuelbasso em gmail.com
> Web site: www.otimizy.com.br
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



-- 
-=Ma®©oS=-
Marcos R. Weimer
Puma GTE 1974 Tubarão



Mais detalhes sobre a lista de discussão lista