[firebase-br] Sum campo TIME

Samuel M. Basso samuelbasso em gmail.com
Qui Jun 9 09:07:15 -03 2011


Marcos bom dia.

Muito obrigado, consegui fazer a função conforme me passou. Obrigado mesmo.



2011/6/8 Marcos Weimer <marcosweimer em gmail.com>

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



Mais detalhes sobre a lista de discussão lista