Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Consulta que retorne o penúltimo resultado no MySQL

Boa tarde, estou com uma dúvida. Tenho duas tabelas, a tabela cartao e a tabela compra, gostaria de obter a penultima compra de cada cartao. Consigo achar a última com essa query abaixo, mas não a penultima compra de cada cartão.

select ca.numero_cartao, co.*
from compra co 
inner join cartao ca on ca.id = co.id_cartao
where co.id = (select max(coi.id) 
                   from compra coi
                   where coi.id_cartao = co.id_cartao);
1 resposta
solução!

Se a necessidade fosse identificar o penúltimo ID de compra, você poderia fazer um subselect. Se a tabela for grande, isso impacta em desempenho. Exemplo:

select CA.numero_cartao, 
(select id from compra where id_cartao = CA.id ORDER BY id DESC LIMIT 1 ,1) as penultimo
from cartao as CA
group by  CA.numero_cartao, CA.id

Caso você queira todos os dados da compra, seria melhor gravar estes resultados numa tabela e usar ela para fazer a seleção. Exemplo:

SELECT * from compra co 
inner join cartao ca on ca.id = co.id_cartao
where co.id in (select codigos from tabela_penultimos)

Você até pode tentar fazer tudo de uma vez, mas creio que o desempenho não ficaria bom. Eu não recomendo, mas seria algo assim:

SELECT * from compra co 
inner join cartao ca on ca.id = co.id_cartao
where co.id in (
select 
(select id from compra where id_cartao = CA.id ORDER BY id DESC LIMIT 1 ,1)
from cartao as CA
group by  CA.numero_cartao, CA.id
) tabela