Retornar os dois últimos registro de cada id

Delphi

Banco de Dados

Firebird

16/11/2020

Boa Tarde a todos.

Tenho o seguinte senario.

Tab Venda -> idvenda, idcliente, dtvenda, totvalor
tab cliente -> idcliente, nome
---------------------------------------------------------------------------------------
tab Venda
idvenda idcliente dtvenda totvalor
1 1 01/02/2020 R$ 10,00
2 4 01/02/2020 R$ 5,00
3 10 01/02/2020 R$ 4,00
4 1 07/02/2020 R$ 2,00
5 2 07/02/2020 R$ 1,00
6 1 15/02/2020 R$ 15,00
---------------------------------------------------------------------------------------
Estou tentando criar um select que traga todos os clientes cadastrado, juntamente com as duas ultimas vendas.

Ex: cliente id =1 , ira retornar as vendas do dia 15/02 - 15,00 e 07/02 - 2,00.

OBS: Caso consiga trazer as duas ultimas vendas de cada cliente, usando somente a tabela venda, já ajuda e muito.

Com esse select abaixo retorna somente a ultima venda, nesse caso preciso ultima e antepenúltima.

select v1.cliente,v1.dtvenda,v1.totgeral,v1.vendacontador from est007 v1
join
(select cliente,max(vendacontador) as ultimavenda from est007 group by cliente)v2
on v2.cliente = v1.cliente and v2.ultimavenda=v1.vendacontador
order by v1.cliente
Deosvaldo

Deosvaldo

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

16/11/2020

tente algo assim:
select
   tv.*
from 
   tabevenda tv
where
   tv.idvenda in (select first 2 tv2.idvenda from tabvenda tv2 where tv2.idcliente = tv.idcliente order by tv2.dtvenda desc)
order by
   tv.idcliente, tv.dtvenda

GOSTEI 0
Deosvaldo

Deosvaldo

16/11/2020

Bom Dia.

Ja havia tentado usar esse select, porem ele retorna mais de 2 registro.
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

16/11/2020

acho que não, hein?

acabei de testar e retorna no máximo 2 registros por cliente.

GOSTEI 0
Deosvaldo

Deosvaldo

16/11/2020

Boa Noite

Desculpa a demora em responder, muita demanda aqui na empresa

Realmente funcionou, eu que não tinha percebido um erro q havia cometido.

Muito obrigado.
GOSTEI 0
POSTAR