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

Responder a