Em 02-05-2013 15:53, Moisés P. Sena escreveu:

Em 2 de maio de 2013 15:31, Flavio Henrique Araque Gurgel
<[email protected] <mailto:[email protected]>> escreveu:

    Isto aqui funcionou pra mim:

    SELECT date_trunc('day', a.datahora), a.datahora, *min(a.valor)*
    FROM dados a GROUP BY 1,2
    HAVING *min(valor)* <= (SELECT min(valor) FROM dados b WHERE
    date_trunc('day', b.datahora)=date_trunc('day', a.datahora)) ORDER BY 2;


Uma curiosidade, a consultada abaixo deu o mesmo resultado para o
exemplo, mas fica a dúvida se ela realmente retorna o mesmo resultado da
que voce propôs, observe que tirei o "*min(a.valor)*" do primeiro select
e do HAVING:

SELECT date_trunc('day', a.datahora), a.datahora, a.valor FROM dados a
GROUP BY 1,2
HAVING a.valor <= (SELECT min(valor) FROM dados b WHERE
date_trunc('day', b.datahora)=date_trunc('day', a.datahora)) ORDER BY 2;

Analisando sua consulta, acho que dá na mesma em termos de resultado e plano de execução (com este volume de dados de teste), com uma operação a menos (a função min sobre valor), ou seja, sua consulta vai consumir um tico a menos de CPU, podendo utilizar um eventual índice simples sobre a coluna valor (ao invés de um índice baseado em função) quando tiver mais linhas na tabela.

Resumindo, sua consulta final parece mais interessante pensando num prazo mais longo, com o mesmo resultado prático.

[]s

__________________________________
Flavio Henrique A. Gurgel
Líder de Projetos Especiais
Consultoria, Projetos & Treinamentos 4LINUX
Tel1: +55-11.2125-4747 ou 2125-4748
www.4linux.com.br
email: [email protected]
______________________________
FREE SOFTWARE SOLUTIONS
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a