[pgbr-geral] Somar horas tendo somente uma coluna
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
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
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