Obrigado pessoal!!
Consegui fazer do jeito que queria e aprendi muito mesmo nessa discussao.
Para a consulta 1:
SELECT DISTINCT ON(datahora)
datahora::date AS dia,
first_value(datahora) OVER(PARTITION BY date_trunc('day', datahora)
ORDER BY valor, datahora) AS datahora,
valor AS valor_minimo
FROM dados;
dia | datahora | valor_minimo
------------+---------------------+--------------
2013-01-01 | 2013-01-01 00:20:00 | 1
2013-01-02 | 2013-01-02 00:30:00 | 2
(2 rows)
Para a consulta 2:
SELECT
date_trunc('day', a.datahora)
, a.datahora
, a.valor
FROM dados a
WHERE valor <= (
SELECT min(valor)
FROM dados b
WHERE date_trunc('day', b.datahora) = date_trunc('day', a.datahora)
)
ORDER BY 2;
date_trunc | datahora | valor
---------------------+---------------------+-------
2013-01-01 00:00:00 | 2013-01-01 00:20:00 | 1
2013-01-02 00:00:00 | 2013-01-02 00:30:00 | 2
2013-01-02 00:00:00 | 2013-01-02 00:50:00 | 2
(3 rows)
Um Abraço a todos!!!
Em 2 de maio de 2013 16:16, Matheus de Oliveira
<[email protected]>escreveu:
>
> 2013/5/2 Matheus de Oliveira <[email protected]>
>
>>
>>> *Segundo resultado esperado:*
>>> *dia | datahora | valor_minimo*
>>> 2013-01-01 | 2013-01-01 00:20:00 | 1
>>> 2013-01-02 | 2013-01-02 00:30:00 | 2
>>> 2013-01-02 | 2013-01-02 00:50:00 | 2
>>>
>>> *OBS: *Observe que às 2013-01-02 00:30:00 e 2013-01-02 00:50:00 o valor
>>> se repete, neste caso, exibir ambos ordenados pela DATAHORA.
>>>
>>> Alguma sugestão de como fazer isso direto no Postgres?
>>> Considerem que so tenho em maos o PSQL em um terminal Linux.
>>>
>>>
>>>
>> Podemos ainda usar a WINDOW FUNCTION e injetar numa sub-consulta:
>>
>> SELECT dia, datahora, valor_minimo FROM (
>> SELECT DISTINCT ON(datahora)
>> datahora::date AS dia,
>> datahora,
>> first_value(valor) OVER(PARTITION BY date_trunc('day', datahora)
>> ORDER BY valor, datahora) AS valor_minimo,
>> valor
>> FROM dados
>> ) AS a
>> WHERE a.valor = a.valor_minimo;
>>
>
> Desculpe, cometi um erro, não precisa do DISTINCT ON nessa (na anterior
> precisava):
>
> SELECT dia, datahora, valor_minimo FROM (
> SELECT
> datahora::date AS dia,
> datahora,
> first_value(valor) OVER(PARTITION BY date_trunc('day', datahora)
> ORDER BY valor, datahora) AS valor_minimo,
> valor
> FROM dados
> ) AS a
> WHERE a.valor = a.valor_minimo;
>
> At.
>
> --
> Matheus de Oliveira
> Analista de Banco de Dados
> Dextra Sistemas - MPS.Br nível F!
> www.dextra.com.br/postgres
>
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>
--
Moisés P. Sena
(Analista e desenvolvedor de sistemas WEB e mobile)
http://www.moisespsena.com
http://linux.moisespsena.com
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral