Trazer 3 últimos pedidos de cada cliente

09/10/2017

0

Estou com a seguinte dificuldade em criar uma store procedure:

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

Cleibson Oliveira

Responder

Posts

10/10/2017

Luiz Vichiatto

Você pode fazer através de um programa que le os clientes e depois le os pedidos do cliente e faz o insert na tabela que deseja.
   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.
Responder

18/03/2020

Murilo Góis

Estou com a seguinte dificuldade em criar uma store procedure:

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
Responder

18/03/2020

Emerson Nascimento

para ter uma ajuda mais personalizada, quando se tratar de banco de dados, publique ao menos as tabelas e os campos envolvidos.
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

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar