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

Responder a