2014/1/23 Osvaldo Kussama <[email protected]>
> Em 22/01/14, Antonio Cesar<[email protected]> escreveu:
> > Versão 9.1
> > sim, posso atualizaar sem problema...
> >
> > Em 21/01/2014 19:09, Matheus de Oliveira escreveu:
> >>
> >>
> >>
> >> 2014/1/21 Antonio Cesar <[email protected]
> >> <mailto:[email protected]>>
> >>
> >> Boa tarde pessoal,
> >> Estou precisando de um select que retorne os 4 ultimos pedidos de
> >> cada cliente.
> >> EX:
> >> Cliente 001 pedido 10, 15, 18 e 20
> >> Cliente 002 pedido 11, 12, 13 e 14
> >>
> >>
>
>
> Na 9.1 é possível utilizar window functions com rank().
> Veja o penúltimo exemplo em:
> http://www.postgresql.org/docs/9.1/interactive/tutorial-window.html
>
>
Acho que para o caso a row_number faz mais sentido:
SELECT *
FROM (
SELECT row_number() OVER(
PARTITION BY vi.codigo_cliente ORDER BY vi.datahoravenda DESC
) AS rn, *
FROM venda vi
) v
WHERE rn <= 4;
Mas meu ponto para a migração para a 9.3 é que a junção com LATERAL é mais
performática para esses casos. E muito mais performática, pois a consulta
acima precisa processar **todos** os registros de venda (na sub-consulta)
para somente depois ficar só com os 4 primeiros e ignorar o restante. É
possível atingir essa performance na 9.1, mas é bem mais "gambiarroso" do
que usando WINDOW FUNTIONs.
Atenciosamente,
--
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