Dificuldade em executar um select

MySQL

30/03/2011

Boa Tarde a Todos,

Estou tendo problemas para executar alguns selects.

EX:

Tenho um sistema de controle de frota, e preciso mostrar em um relatorio o ultimo km de retorno de todos os veiculos, ou seja, quando o veiculo volta e gravado o km de retorno, o mesmo devera substituir o antigo km pelo km novo no relatorio.


select * from transportes

ex:

cod: 5 Carro:uno km:1000
cod:10 Carro:uno km:2000
cod:11 Carro:celta km:500
cod:12 Carro:uno km:3500


usando esse select abaixo consegui um avanço em tirar a duplicidade veja.


SELECT transporte.cod,kmf,transporte
FROM emphasis.transporte left join emphasis.carros on (nome = transporte)
GROUP BY transporte, nome
ORDER BY cod desc 

resultado:

cod:5 Carro:uno km:1000
cod:11Carrocelta km:500

porem ele pega o primeiro registro de cada carro, e eu preciso que ele me mostre sempre o ultimo km de cada carro.


se alguém puder me ajudar eu agradesço.

 
André Luiz

André Luiz

Curtidas 0

Respostas

Wilson Junior

Wilson Junior

30/03/2011

Coloque aqui a estrutura das suas tabelas, pois está meio confuso este seu SQL.

Aguardo retorno.
GOSTEI 0
André Luiz

André Luiz

30/03/2011

Cod int(10)   notnull auto inctransporte varchar(45)  notnullkmi int(10) notnulldatae datetime notnull datas datetime notnullkmf varchar(45) notnullmotorista varchar(45) notnulldestino varchar(45) notnullcalculo int(10) notnullemtransito int(2) notnullmotoristaretorno varchar(45) notnull
GOSTEI 0
André Luiz

André Luiz

30/03/2011


Boa Tarde a Todos,

Estou tendo problemas para executar alguns selects.

EX:

Tenho um sistema de controle de frota, e preciso mostrar em um relatorio o ultimo km de retorno de todos os veiculos, ou seja, quando o veiculo volta e gravado o km de retorno, o mesmo devera substituir o antigo km pelo km novo no relatorio.


select * from transportes

ex:

cod: 5 Carro:uno km:1000
cod:10 Carro:uno km:2000
cod:11 Carro:celta km:500
cod:12 Carro:uno km:3500


usando esse select abaixo consegui um avanço em tirar a duplicidade veja.


SELECT transporte.cod,kmf,transporte
FROM emphasis.transporte left join emphasis.carros on (nome = transporte)
GROUP BY transporte, nome
ORDER BY cod desc 

resultado:

cod:5 Carro:uno km:1000
cod:11Carrocelta km:500

porem ele pega o primeiro registro de cada carro, e eu preciso que ele me mostre sempre o ultimo km de cada carro.


se alguém puder me ajudar eu agradesço.


Cod int(10)   notnull auto inctransporte varchar(45)  notnullkmi int(10) notnulldatae datetime notnull datas datetime notnullkmf varchar(45) notnullmotorista varchar(45) notnulldestino varchar(45) notnullcalculo int(10) notnullemtransito int(2) notnullmotoristaretorno varchar(45) notnull
    

 
GOSTEI 0
Wilson Junior

Wilson Junior

30/03/2011

Tente isto:
SELECT DISTINCT
  transp.Cod,
  transp.Transporte,
  transp.KmF
FROM
  TRANSPORTE transp
WHERE
  transp.Cod = (SELECT MAX(transp2.Cod) FROM TRANSPORTE transp2 WHERE transp2.Transporte = transp1.Transporte)
ORDER BY
  transp.Cod DESC


Espero ter colaborado.
GOSTEI 0
André Luiz

André Luiz

30/03/2011

agradesço a força, mas não consegui executar esse script

ele diz que não existe a tabela, e quando coloco a tabela diz não existir o campo transp1
GOSTEI 0
André Luiz

André Luiz

30/03/2011


Tente isto:
SELECT DISTINCT
  transp.Cod,
  transp.Transporte,
  transp.KmF
FROM
  TRANSPORTE transp
WHERE
  transp.Cod = (SELECT MAX(transp2.Cod) FROM TRANSPORTE transp2 WHERE transp2.Transporte = transp1.Transporte)
ORDER BY
  transp.Cod DESC


Espero ter colaborado.
 
 



Obrigado pela ajuda, consegui resolver da seguinte forma.
select * from transportes t1
where km = (select max(km) from transportes t2 where t2.carro = t1.carro)
group by carro;
GOSTEI 0
Wilson Junior

Wilson Junior

30/03/2011

Eu só me confundi com os alias das tabelas, mas pelo menos você conseguiu entender a lógica que pensei...e o mais importante é que foi solucionada a dúvida.
GOSTEI 0
José

José

30/03/2011

Este tópico esta sendo fechado por inatividade. Se necessário, sinalizar para que seja reaberto ou abrir um novo.
GOSTEI 0
POSTAR