2009/4/7 Newton Teixeira do Nascimento Júnior
<[email protected]>:
>
> Tenho uma tabela X com os campos data_hora (timestamp without timezone) e
> valor (real).
>
> Essa tabela recebe registros a cada 10 ou 30 segundos.
>
> Ao fim do dia, esta tabela está com cerca de 6500 registros.
>
> Quero plotar um gráfico Valor X Tempo, porém não dá com essa quantidade de
> registros.
>
> Gostaria de fazer um select que retornasse a média de valores em um
> determinado intervalo, por exemplo:
>
> o valor médio a cada minuto ou o valor médio a cada 02 minutos, ou o valor
> média a cada 05 minutos, etc (Esse intervalo poderia ser um parâmetro).
>


Sugestão:
Utilize uma tabela auxiliar, que pode ser gerada através da função
generate_series(start, stop, step).
Ex. :
SELECT menor_data_hora + s.a*'1 minute'::interval
FROM generate_series(0, minutos(maior_data_hora-menor_data_hora),
intervalo_desejado)  AS s(a);

Faça um INNER JOIN entre a tabela auxiliar e sua tabela utilizando
como critério de junção:
data_hora BETWEEN aux.inicio_intervalo AND aux.inicio_intervalo+intervalo
e fazendo um GROUP BY inicio_intervalo e pegando a média dos valores.

Bom, a idéia é essa, agora é botar as mãos na massa.

Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a