Ir para conteúdo
Fórum Script Brasil
  • 0

Como selecionar pela última data?


Tchello

Pergunta

7 respostass a esta questão

Posts Recomendados

  • 0
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

Oi T

Você 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.

Link para o comentário
Compartilhar em outros sites

  • 0

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 2010

ped_data cli_razao ped_total_pedido

2010-11-30 PAULO ARAUJO - TESTE 3000

Retornou o primeiro registro e não o último, o que pode estar errado?

Editado por Denis Courcy
Melhorar entendimento do código
Link para o comentário
Compartilhar em outros sites

  • 0

'Tchello'

Não sei o que aconteceu aqui em seu código:

HAVING MAX(a.ped_data), Fri Dec 17 11:09:53 2010

Que 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)

Link para o comentário
Compartilhar em outros sites

  • 0

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_pedido

2010-11-30 PAULO ARAUJO - TESTE 3000

Editado por Denis Courcy
Melhorar entendimento do código
Link para o comentário
Compartilhar em outros sites

  • 0
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_pedido

2010-11-30 PAULO ARAUJO - TESTE 3000

Você 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.

Link para o comentário
Compartilhar em outros sites

  • 0

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_pedido

2010-11-30 PAULO ARAUJO - TESTE 3000

Link para o comentário
Compartilhar em outros sites

  • 0

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 data

Poré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????

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...