Em 1 de setembro de 2010 15:31, Victor Hugo <[email protected]>escreveu:

>
> 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.000000', 4), ('2010-09-01 14:17:00.000000', 4);INSERT
0 2
postg...@bdteste=# insert into sessao (data_sessao, id_usuario) values
('2010-09-02 13:10:00.000000', 4), ('2010-09-02 13:18:00.000000', 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
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a