[pgbr-geral] Somar horas tendo somente uma coluna

2010-09-01 Por tôpico Beto Lima
Olá queria saber se há como somar horas onde tenho apenas uma coluna
tabela de exemplo segue assim:

tabela horas
id | data_sessao | id_usuario

valores:
1 | 2010-09-01 14:15:00.00 | 4
2 | 2010-09-01 14:17:00.00 | 4

a soma teria que dar 2 minutos.
obs: o campo data_sessão é timestamp without time zone

tentei assim mas não deu certo.
select sum(data_sessao) from horas where id_usuario = 4

Obrigado
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Somar horas tendo somente uma coluna

2010-09-01 Por tôpico Fabrízio de Royes Mello
Em 1 de setembro de 2010 15:31, Victor Hugo vh.cleme...@gmail.comescreveu:


 Vc quer diminuir usando função de agregação SUM ??? SUM é para somar...

 é isso mesmo ??? Se não for, resolva com a query abaixo

 SELECT SUM(EXTRACT (minutes from data_sessao))
 FROM horas where id_usuario = 4

 aí no caso ele irá extrair os minutos do primeiro valor que é 15 + do
 segundo valor que é 17 contabilizando um total de 32 minutos.


Exato... só exemplificando o que pode acontecer:

postg...@bdteste=# create table sessao (id serial, data_sessao timestamp,
id_usuario integer);
NOTICE:  CREATE TABLE will create implicit sequence sessao_id_seq for
serial column sessao.id
CREATE TABLE
postg...@bdteste=# insert into sessao (data_sessao, id_usuario) values
('2010-09-01 14:15:00.00', 4), ('2010-09-01 14:17:00.00', 4);INSERT
0 2
postg...@bdteste=# insert into sessao (data_sessao, id_usuario) values
('2010-09-02 13:10:00.00', 4), ('2010-09-02 13:18:00.00', 4);
INSERT 0 2
postg...@bdteste=# select max(data_sessao) - min(data_sessao) from sessao;
 ?column?
--
 23:03:00
(1 row)


Nesse caso foi verificado o intervalo de tempo entre a menor e maior
data/hora, mas creio que isso não seja o desejado, então quem sabe:

postg...@bdteste=# select data_sessao::date, max(data_sessao) -
min(data_sessao) from sessao group by 1;
 data_sessao | ?column?
-+--
 2010-09-02  | 00:08:00
 2010-09-01  | 00:02:00
(2 rows)


Ou ainda:

postg...@bdteste=# select sum(intervalo) from (select data_sessao::date,
max(data_sessao) - min(data_sessao) as intervalo from sessao group by 1) as
tempo;
   sum
--
 00:10:00
(1 row)


Dai depende dos teus requisitos!

-- 
Fabrízio de Royes Mello
 Blog sobre TI: http://fabriziomello.blogspot.com
 Perfil Linkedin: http://br.linkedin.com/in/fabriziomello
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Somar horas tendo somente uma coluna

2010-09-01 Por tôpico Alexsander Rosa
Poderia ser uma diferença entre um max() e um min() numa subquery.

Em 1 de setembro de 2010 15:41, Fabrízio de Royes Mello 
fabriziome...@gmail.com escreveu:


 Em 1 de setembro de 2010 15:31, Victor Hugo vh.cleme...@gmail.comescreveu:


 Vc quer diminuir usando função de agregação SUM ??? SUM é para somar...

 é isso mesmo ??? Se não for, resolva com a query abaixo

 SELECT SUM(EXTRACT (minutes from data_sessao))
 FROM horas where id_usuario = 4

 aí no caso ele irá extrair os minutos do primeiro valor que é 15 + do
 segundo valor que é 17 contabilizando um total de 32 minutos.


 Exato... só exemplificando o que pode acontecer:

 postg...@bdteste=# create table sessao (id serial, data_sessao timestamp,
 id_usuario integer);
 NOTICE:  CREATE TABLE will create implicit sequence sessao_id_seq for
 serial column sessao.id
 CREATE TABLE
 postg...@bdteste=# insert into sessao (data_sessao, id_usuario) values
 ('2010-09-01 14:15:00.00', 4), ('2010-09-01 14:17:00.00', 4);INSERT
 0 2
 postg...@bdteste=# insert into sessao (data_sessao, id_usuario) values
 ('2010-09-02 13:10:00.00', 4), ('2010-09-02 13:18:00.00', 4);
 INSERT 0 2
 postg...@bdteste=# select max(data_sessao) - min(data_sessao) from sessao;
  ?column?
 --
  23:03:00
 (1 row)


 Nesse caso foi verificado o intervalo de tempo entre a menor e maior
 data/hora, mas creio que isso não seja o desejado, então quem sabe:

 postg...@bdteste=# select data_sessao::date, max(data_sessao) -
 min(data_sessao) from sessao group by 1;
  data_sessao | ?column?
 -+--
  2010-09-02  | 00:08:00
  2010-09-01  | 00:02:00
 (2 rows)


 Ou ainda:

 postg...@bdteste=# select sum(intervalo) from (select data_sessao::date,
 max(data_sessao) - min(data_sessao) as intervalo from sessao group by 1) as
 tempo;
sum
 --
  00:10:00
 (1 row)


 Dai depende dos teus requisitos!

 --
 Fabrízio de Royes Mello
  Blog sobre TI: http://fabriziomello.blogspot.com
  Perfil Linkedin: http://br.linkedin.com/in/fabriziomello


 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




-- 
Atenciosamente,
Alexsander da Rosa
Linux User #113925

Extremismo na defesa da liberdade não é defeito.
Moderação na busca por justiça não é virtude.
-- Barry Goldwater
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral