Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Preciso retornar na consulta abaixo os veículos (sem repetir o mesmo veiculo) com seu respectivo ultimo empréstimo (somente o ultimo empréstimo do veiculo) mais não tenho ideia de como fazer isso. Segue código que fiz:
SELECT ve.id as id,
v_e.id as id_emprestimo,
ve.placa as placa,
ve.emprestado as emprestado,
ve.cor as cor,
v.veiculo as veiculo,
us.nome as nome_usuario,
us.sobrenome as sobrenome_usuario,
v_e.data_emprestimo as data_emprestimo,
v_e.km_inicial as km_inicial,
vde.data as data_entrega,
vde.km_final as km_final,
v_e.obs as obs_emprestimo,
ve.km_prox_troca_oleo as km_prox_troca_oleo,
vde.obs as obs_entrega
FROM veiculos_emprestimos v_e
INNER JOIN veiculos_empresa ve on ve.id = v_e.id_veiculos_empresa
INNER JOIN veiculos v on v.id = ve.id_veiculo
INNER JOIN usuarios us on us.id_usuario = v_e.id_usuario
LEFT JOIN veiculos_dev_emprestimos vde on vde.id_veiculos_emprestimos = v_e.idMota, tentei colocando o código abaixo, mais agora só traz o veiculo referente ao ultimo empréstimo.
Preciso trazer todos os veículos da empresa e cada um deles com o seu respectivo empréstimo(ultimo empréstimo)
SELECT ve.id as id,
v_e.id as id_emprestimo,
ve.placa as placa,
ve.emprestado as emprestado,
ve.cor as cor,
v.veiculo as veiculo,
us.nome as nome_usuario,
us.sobrenome as sobrenome_usuario,
v_e.data_emprestimo as data_emprestimo,
v_e.km_inicial as km_inicial,
vde.data as data_entrega,
vde.km_final as km_final,
v_e.obs as obs_emprestimo,
ve.km_prox_troca_oleo as km_prox_troca_oleo,
vde.obs as obs_entrega
FROM veiculos_emprestimos v_e
INNER JOIN veiculos_empresa ve on ve.id = v_e.id_veiculos_empresa
INNER JOIN veiculos v on v.id = ve.id_veiculo
INNER JOIN usuarios us on us.id_usuario = v_e.id_usuario
LEFT JOIN veiculos_dev_emprestimos vde on vde.id_veiculos_emprestimos = v_e.id
WHERE v_e.id = (SELECT max(vemp.id) as id FROM veiculos_emprestimos vemp, veiculos_empresa ve where vemp.id_veiculos_empresa = ve.id ORDER BY vemp.id DESC LIMIT 1)...
WHERE v_e.data_emprestimo = (SELECT max(vemp.data_emprestimo) as id FRO
...Obrigado pela ajuda Motta, mais ainda sim esta trazendo um único veículo.
Vou descrever melhor o cenário, talvez eu não esteja sabendo passar direito a minha dúvida.
Tenho uma tabela chamada veículos_empresa onde tenho 10 veículos cadastrados.
Uma tabela veiculos_emprestimos onde tenho todas as saídas de empréstimos dos veículos
e uma tabela veiculos_dev_emprestimos onde ficam registrados as devoluções dos veículos.
Preciso listar todos os veículos da empresa sem repeti-los e mostrando o ultimo empréstimo e se tiver mostrar a ultima devolução. dessa forma:
Placa | Veiculo | Data Emprestimo | KM Inicial | Data Devolução | KM Final
FRT-2365 | UP 1.0 | 05/05/2015 | 12.150 | 05/05/2015 | 12.450
FGT-3523 | Montana 1.4 | 07/08/2015 | 100.103 | 07/08/2015 | 100.450
FGH-2563 | Celta 1.0 | 07/08/2015 | 104.300 | |
Observe que o veiculo não se repete trazendo somente a ultima movimentação de empréstimo
O ultimo código que tentei com a sua ajuda foi :
SELECT ve.id as id,
v_e.id as id_emprestimo,
ve.placa as placa,
ve.emprestado as emprestado,
ve.cor as cor,
v.veiculo as veiculo,
us.nome as nome_usuario,
us.sobrenome as sobrenome_usuario,
v_e.data_emprestimo as data_emprestimo,
v_e.km_inicial as km_inicial,
vde.data as data_entrega,
vde.km_final as km_final,
v_e.obs as obs_emprestimo,
ve.km_prox_troca_oleo as km_prox_troca_oleo,
vde.obs as obs_entrega
FROM veiculos_emprestimos v_e
INNER JOIN veiculos_empresa ve on ve.id = v_e.id_veiculos_empresa
INNER JOIN veiculos v on v.id = ve.id_veiculo
INNER JOIN usuarios us on us.id_usuario = v_e.id_usuario
LEFT JOIN veiculos_dev_emprestimos vde on vde.id_veiculos_emprestimos = v_e.id
WHERE v_e.data_emprestimo = (SELECT max(vemp.data_emprestimo) as id FROM veiculos_emprestimos vemp)alguem sabe como eu posso fazer isso?
Agora usei o a seguinte instrução:
SELECT ve.id as id,
ve.placa as placa,
v.veiculo as veiculo,
ve.cor as cor,
ve.km_prox_troca_oleo as km_prox_troca_oleo,
MAX(v_e.id) as id_emprestimo,
v_e.data_emprestimo as data_emprestimo,
v_e.km_inicial as km_inicial,
v_e.data_devolucao as data_devolucao,
v_e.km_final as km_final
FROM veiculos_empresa ve
INNER JOIN veiculos v on v.id = ve.id_veiculo
LEFT JOIN veiculos_emprestimos v_e ON v_e.id_veiculos_empresa = ve.id
WHERE ve.ativo = 1
group by ve.id
ORDER BY v.veiculo
Ele esta me trazendo a ultima movimentação de cada veiculo como eu preciso, porem, mesmo que não exista registrado o KM_FINAL e a DATA_DEVOLUCAO aparece a informação da ultima movimentação.
Como eu consigo resolver isso?
Veja se ajuda.