Tchello Postado Dezembro 17, 2010 Denunciar Share Postado Dezembro 17, 2010 Tenho uma tabela de vendas e preciso listar a "última" compra de cada cliente, ex.:Cliente - Data da Última VendaFulano 2010-11-25Cicrano 2010-12-10Beltrano 2010-12-13 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Dezembro 17, 2010 Denunciar Share Postado Dezembro 17, 2010 Tenho uma tabela de vendas e preciso listar a "última" compra de cada cliente, ex.:Cliente - Data da Última VendaFulano 2010-11-25Cicrano 2010-12-10Beltrano 2010-12-13Oi TVocê pode fazer como no exemplo abaixo:select cliente, dtvenda as `Data Ultima Venda` from Venda group by cliente having max(dtvenda)Não esqueça de ciar um índice por data da venda. A ausencia deste índice gerará um table scan que sentará seu MySQL server. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Tchello Postado Dezembro 17, 2010 Autor Denunciar Share Postado Dezembro 17, 2010 (editado) Cara deu + ou - certo por exceção de um detalhe não retornou a última data, abaixo segue os prints dos resultados prá vê se ajuda:Total de pedidos(vendas) de um cliente teste:SELECT a.ped_data, c.cli_razao, a.ped_total_pedido FROM pedido a INNER JOIN historico_rel b ON a.historico_rel_hir_id = b.hir_id INNER JOIN cliente c ON b.cliente_cli_id = c.cli_id WHERE c.cli_id = '2393' ped_data cli_razao ped_total_pedido 2010-11-30 PAULO ARAUJO - TESTE 3000 2010-11-30 PAULO ARAUJO - TESTE 3000 2010-11-30 PAULO ARAUJO - TESTE 2500 2010-11-30 PAULO ARAUJO - TESTE 1800 2010-11-30 PAULO ARAUJO - TESTE 6400 2010-12-03 PAULO ARAUJO - TESTE 1000 2010-12-03 PAULO ARAUJO - TESTE 6300 2010-12-03 PAULO ARAUJO - TESTE 450 Resultado seguindo sua dica: SELECT a.ped_data, c.cli_razao, a.ped_total_pedido FROM pedido a INNER JOIN historico_rel b ON a.historico_rel_hir_id = b.hir_id INNER JOIN cliente c ON b.cliente_cli_id = c.cli_id WHERE c.cli_id = '2393' GROUP BY c.cli_razao HAVING MAX(a.ped_data), Fri Dec 17 11:09:53 2010ped_data cli_razao ped_total_pedido2010-11-30 PAULO ARAUJO - TESTE 3000Retornou o primeiro registro e não o último, o que pode estar errado? Editado Dezembro 17, 2010 por Denis Courcy Melhorar entendimento do código Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Dezembro 17, 2010 Denunciar Share Postado Dezembro 17, 2010 'Tchello'Não sei o que aconteceu aqui em seu código:HAVING MAX(a.ped_data), Fri Dec 17 11:09:53 2010Que data é essa? Por que existe virgula após o MAX?Como não tenho todos os elementos para teste vou por tentativa e erro.Tente assim:SELECT STRAIGTH_JOIN DISTINCT a.ped_data, c.cli_razao, a.ped_total_pedido FROM cliente c INNER JOIN historico_rel b ON b.cliente_cli_id = c.cli_id INNER JOIN pedido a ON a.historico_rel_hir_id = b.hir_id WHERE c.cli_id = '2393' GROUP BY c.cli_razao HAVING MAX(a.ped_data) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Tchello Postado Dezembro 17, 2010 Autor Denunciar Share Postado Dezembro 17, 2010 (editado) Fiz como indicado porém ainda está retornando o primeiro e não o último (quanto a data q você mencionou é apenas a data do sistema q saiu no print)SELECT STRAIGHT_JOIN DISTINCT a.ped_data, c.cli_razao, a.ped_total_pedido FROM pedido a INNER JOIN historico_rel b ON a.historico_rel_hir_id = b.hir_id INNER JOIN cliente c ON b.cliente_cli_id = c.cli_id WHERE c.cli_id = '2393' HAVING MAX(ped_data)ped_data cli_razao ped_total_pedido2010-11-30 PAULO ARAUJO - TESTE 3000 Editado Dezembro 17, 2010 por Denis Courcy Melhorar entendimento do código Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Dezembro 17, 2010 Denunciar Share Postado Dezembro 17, 2010 Fiz como indicado porém ainda está retornando o primeiro e não o último (quanto a data q você mencionou é apenas a data do sistema q saiu no print)SELECT STRAIGHT_JOIN DISTINCT a.ped_data, c.cli_razao, a.ped_total_pedido FROM pedido a INNER JOIN historico_rel b ON a.historico_rel_hir_id = b.hir_id INNER JOIN cliente c ON b.cliente_cli_id = c.cli_id WHERE c.cli_id = '2393' HAVING MAX(ped_data)ped_data cli_razao ped_total_pedido2010-11-30 PAULO ARAUJO - TESTE 3000Você tem certeza que fez o que eu orientei?A ordem das tabelas de seu post não está iguual a ordem das tabelas do meu post.No seu post está faltando a cláusula group by. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Tchello Postado Dezembro 18, 2010 Autor Denunciar Share Postado Dezembro 18, 2010 Segue o print do resultado de acordo com o código q você postou, porém continua retornando o mesmo resultado:Query SELECT STRAIGHT_JOIN DISTINCT a.ped_data, c.cli_razao, a.ped_total_pedido FROM cliente c INNER JOIN historico_rel b ON b.cliente_cli_id = c.cli_id INNER JOIN pedido a ON a.historico_rel_hir_id = b.hir_id WHERE c.cli_id = '2393' GROUP BY c.cli_razao HAVING MAX(a.ped_data)ped_data cli_razao ped_total_pedido2010-11-30 PAULO ARAUJO - TESTE 3000 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Tchello Postado Dezembro 21, 2010 Autor Denunciar Share Postado Dezembro 21, 2010 Bom pessoal consegui resolver em partes, com o código abaixo:SELECT MAX(a.ped_data) AS data, MAX(a.ped_id) AS pedid, MAX(a.ped_numero) AS pedido, a.ped_tipo, b.usuario_usu_id, c.cli_id, c.cli_perfil, c.cli_razao, a.ped_total_pedido AS total, DATEDIFF(CURDATE(),MAX(a.ped_data)) AS dias FROM cliente c INNER JOIN historico_rel b ON b.cliente_cli_id = c.cli_id INNER JOIN pedido a ON a.historico_rel_hir_id = b.hir_id WHERE a.ped_tipo <> 2 AND a.ped_gratuito = 0 AND a.ped_status = 1 AND b.usuario_usu_id = 'televendas02' GROUP BY c.cli_razao ORDER BY dataPorém o total(valor) não retorna o correspondente, se eu colocar: MAX(a.ped_total_pedido) AS total, retorna o maior valor e não o último inserido.Alguém tem alguma idéia???? Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Tchello
Tenho uma tabela de vendas e preciso listar a "última" compra de cada cliente, ex.:
Cliente - Data da Última Venda
Fulano 2010-11-25
Cicrano 2010-12-10
Beltrano 2010-12-13
Link para o comentário
Compartilhar em outros sites
7 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.