Ir para conteúdo

Arquivado

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

Giuliano Santos

Busca Distinta

Recommended Posts

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.id

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mota, 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)

Compartilhar este post


Link para o post
Compartilhar em outros sites


...

WHERE v_e.data_emprestimo = (SELECT max(vemp.data_emprestimo) as id FRO

...

Compartilhar este post


Link para o post
Compartilhar em outros sites

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)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

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.