Discussion:
Somar horas tendo somente uma coluna
Beto Lima
2010-09-01 18:14:41 UTC
Permalink
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.000000 | 4
2 | 2010-09-01 14:17:00.000000 | 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
Victor Hugo
2010-09-01 18:19:50 UTC
Permalink
beto,

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

[]´s
victor hugo
Post by Beto Lima
Olá queria saber se há como somar horas onde tenho apenas uma coluna
tabela horas
id | data_sessao | id_usuario
1 | 2010-09-01 14:15:00.000000 | 4
2 | 2010-09-01 14:17:00.000000 | 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
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
--
[]´s
Victor Hugo
Victor Hugo
2010-09-01 18:31:19 UTC
Permalink
Beto,

Agora q eu percebi...

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.

[]´s
victor hugo
Post by Victor Hugo
beto,
SELECT SUM(EXTRACT (minutes from data_sessao)
FROM horas where id_usuario = 4
[]´s
victor hugo
Post by Beto Lima
Olá queria saber se há como somar horas onde tenho apenas uma coluna
tabela horas
id | data_sessao | id_usuario
1 | 2010-09-01 14:15:00.000000 | 4
2 | 2010-09-01 14:17:00.000000 | 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
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
--
[]´s
Victor Hugo
--
[]´s
Victor Hugo
Fabrízio de Royes Mello
2010-09-01 18:41:26 UTC
Permalink
Post by Victor Hugo
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:

***@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
***@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
***@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
***@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:

***@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:

***@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
Post by Victor Hugo
Blog sobre TI: http://fabriziomello.blogspot.com
Perfil Linkedin: http://br.linkedin.com/in/fabriziomello
Alexsander Rosa
2010-09-01 19:25:49 UTC
Permalink
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 <
Post by Fabrízio de Royes Mello
Post by Victor Hugo
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.
id_usuario integer);
NOTICE: CREATE TABLE will create implicit sequence "sessao_id_seq" for
serial column "sessao.id"
CREATE TABLE
('2010-09-01 14:15:00.000000', 4), ('2010-09-01 14:17:00.000000', 4);INSERT
0 2
('2010-09-02 13:10:00.000000', 4), ('2010-09-02 13:18:00.000000', 4);
INSERT 0 2
?column?
----------
23:03:00
(1 row)
Nesse caso foi verificado o intervalo de tempo entre a menor e maior
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)
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
Post by Victor Hugo
Blog sobre TI: http://fabriziomello.blogspot.com
Perfil Linkedin: http://br.linkedin.com/in/fabriziomello
_______________________________________________
pgbr-geral mailing list
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
Fabrízio de Royes Mello
2010-09-01 19:32:14 UTC
Permalink
Em 1 de setembro de 2010 16:25, Alexsander Rosa
Post by Alexsander Rosa
Poderia ser uma diferença entre um max() e um min() numa subquery.
Poderia sim, mas vai depender do problema que quer se resolver... até agora
fizemos apenas sugestões baseado numa vaga explicação... se observarmos o
último exemplo que citei usei uma subquery para somar os intervalos de tempo
dia a dia, mas será essa a solução do problema???

Fala ai Beto, qual a sua real necessidade!!!! Que problema vc precisa
resolver???
--
Fabrízio de Royes Mello
Post by Alexsander Rosa
Blog sobre TI: http://fabriziomello.blogspot.com
Perfil Linkedin: http://br.linkedin.com/in/fabriziomello
Fabrízio de Royes Mello
2010-09-01 18:33:51 UTC
Permalink
Post by Beto Lima
Olá queria saber se há como somar horas onde tenho apenas uma coluna
tabela horas
id | data_sessao | id_usuario
1 | 2010-09-01 14:15:00.000000 | 4
2 | 2010-09-01 14:17:00.000000 | 4
a soma teria que dar 2 minutos.
obs: o campo data_sessão é timestamp without time zone
Ugh??? 2 minutos??? Uma soma dessas colunas não tem como ser 2 minutos...
se vc somar somente os minutos das linhas da coluna "data_sessao" então
teremos 15 + 17 = 32...

O que vc deseja não seria a "diferença" entre elas?? Ou seja, qual o
intervalo de tempo??? Pq assim se vc diminuir "14:17:00" de "14:15:00" vc
terá os seus 2 minutos, veja:

***@bdteste=# SELECT '2010-09-01 14:17:00.000000'::timestamp -
'2010-09-01 14:15:00.000000'::timestamp;
?column?
----------
00:02:00
(1 row)



tentei assim mas não deu certo.
Post by Beto Lima
select sum(data_sessao) from horas where id_usuario = 4
Se o que vc realmente deseja é o somatório dos intervalos de tempo dai tem
que fazer de outra forma... qual a sua real necessidade?
--
Fabrízio de Royes Mello
Post by Beto Lima
Blog sobre TI: http://fabriziomello.blogspot.com
Perfil Linkedin: http://br.linkedin.com/in/fabriziomello
Continue reading on narkive:
Loading...