Fórum Trazer 3 últimos pedidos de cada cliente #586605
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
Curtir tópico
+ 0Posts
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.
Gostei + 0
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
Gostei + 0
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)