Trazer 3 últimos pedidos de cada cliente
09/10/2017
0
Cenário: Tenho uma tabela com "n" pedidos de "n" clientes, quero gravar em outra tabela somente o número dos 3 últimos pedidos de cada cliente.
* uso firebird 2.5
Cleibson Oliveira
Posts
10/10/2017
Luiz Vichiatto
consulta_clientes = select codigo_cliente from clientes while consulta_clientes not eof do consulta_pedidos = select top 3 * from pedido where codigo_cliente=consulta_clientes.codigo_cliente order by data_pedido desc insert tabela_nova = consulta_pedidos end
A ideia é esta.
18/03/2020
Murilo Góis
Cenário: Tenho uma tabela com "n" pedidos de "n" clientes, quero gravar em outra tabela somente o número dos 3 últimos pedidos de cada cliente.
* uso firebird 2.5
Uma outra solução seria criar uma tabela auxiliar utilizando o row_number com partition e depois fazer um Join selecionando somente o resultado do row_number <=3. Ficaria +- assim:
SELECT * FROM PEDIDO T0
INNER JOIN (SELECT NumPedido, Data,Cliente, ROW_NUMBER() OVER(PARTITION BY Cliente ORDER BY Data DESC) as 'Contador ' from PEDIDO) T1
ON T0.NumPedido = T1.NumPedido and T1.Contador <=3
18/03/2020
Emerson Nascimento
de qualquer forma, segue um exemplo de como obter os 3 últimos pedidos por cliente:
SELECT CLIENTE, PED3, PED2, PED1 FROM ( SELECT RANK() OVER (PARTITION BY CLIENTE ORDER BY CLIENTE, PED3 DESC) LINHA, CLIENTE, PED1, PED2, PED3 FROM ( SELECT CLIENTE, LEAD(NUMPED,2) OVER (PARTITION BY CLIENTE ORDER BY CLIENTE, NUMPED DESC) PED1, LEAD(NUMPED,1) OVER (PARTITION BY CLIENTE ORDER BY CLIENTE, NUMPED DESC) PED2, NUMPED PED3 FROM PEDIDOS WHERE NOT CLIENTE IS NULL ) T1 ) T2 WHERE LINHA = 1
Clique aqui para fazer login e interagir na Comunidade :)