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
