Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Magrini

[Resolvido] Problema com Iner Join e Max

Recommended Posts

Pessoal, estou com uma situação que não consigo resolver.

Estrutura das tabelas:

VEICULO

ve_cod (chave primaria)

ve_placa

 

POSICAO

pos_cod (chave primaria)

ve_cod(chave estrangeira)

pos_datahora

pos_posicao

 

 

Preciso puxar a posição mais recente da tabela posição de cada veículo da tabela veículo.

 

Usei a instrução a seguir:

 

select * from posicao as p
inner join
(select max(pos_datahora) pos_datahora,ve_cod from posicao group by ve_cod) as p2
on (p.ve_cod=p2.ve_cod and p.pos_datahora=p2.pos_datahora)

 

Porém o resultado que consegui foi:

 

pos_cod | ve_cod | pos_datahora | pos_posicao

1001 | 1 | 2010-12-17 18:00:00 | POSICAO TESTE1

1002 | 2 | 2010-12-17 19:00:00 | POSICAO TESTE2

1003 | 3 | 2010-12-17 20:00:00 | POSICAO TESTE3

 

 

Com essa instrução eu não consigo trazer a placa do veículo da tabela veiculo.

 

Também tentei de outra forma:

SELECT * from veiculo left join (select posicao.pos_cod, posicao.ve_cod, posicao.pos_posicao, posicao.pos_lat, posicao.pos_long, posicao.pos_ignicao, max(posicao.pos_datahora)FROM posicao GROUP BY posicao.ve_cod) AS posicao ON veiculo.ve_cod=posicao.ve_cod

 

Desta forma ele informa os dados do veiculo corretamente, o campo pos_datahora corretamente, porém o campo pos_posicao ele pega os dados dos 3 primeiros registros da tabela posicao e não o correspondente do registro.

 

Alguém conseguiria me ajudar?

 

Agradeço

Compartilhar este post


Link para o post
Compartilhar em outros sites
VEICULO

ve_cod (chave primaria)

ve_placa

 

POSICAO

pos_cod (chave primaria)

ve_cod(chave estrangeira)

pos_datahora

pos_posicao

 

 

Preciso puxar a posição mais recente da tabela posição de cada veículo da tabela veículo.

 

posicao mais recente

 

select *
from   posicao p1
where  pos_cod = (select max(pos_cod)
                 from posicao p2
                 where p2.ve_cod = p1.ve_cod)

 

Junta com o veiculo

 

select v.*,p1.*
from   veiculo v,posicao p1
where  p1.ve_cod = v.ve_cod
and    p1.pos_cod = (select max(pos_cod)
                    from posicao p2
                    where p2.ve_cod = p1.ve_cod)

 

Creio ser isto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Putz...

 

Deu certíssimo Motta.

 

Eu tinha achado uma solução, mas estava fazendo o select max em cima do campo pos_datahora. Nem tinha me tocado que daria pra fazer pelo código da posição.

 

 

Obrigado pela ajuda!

 

Abraços

 

Bruno

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.