SQL COMBUSTIVEL
Olá pessoal tudo bem com você?
Seguinte estou fazendo um controle de combustÃvel para um cliente meu no entanto funcionando blz o problema esta no SQL que criei para emitir o relátório
de média do combustivel por placa do veÃculo
SQL
Esse SELECT faz o seguinte ele captura as informações que tem lançada na tabela e procura o valor anterior daquele lançamento, só que?!?!?!?!?!
ao passar para qualquer placa que não seja a primeira o calculo sempre capturar o ultimo hodômetro da placa anterior sendo que a primeira de qualquer veÃculo vai ser 0(zero a diferenca)
como posso resolver isso
Seguinte estou fazendo um controle de combustÃvel para um cliente meu no entanto funcionando blz o problema esta no SQL que criei para emitir o relátório
de média do combustivel por placa do veÃculo
SQL
SELECT X.aba_hodometro, X.aba_litros, X.aba_preco, X.aba_posto, X.aba_total, X.Media, tbVeiculos.vei_placa, X.aba_data, X.Dif
FROM ((SELECT tbAbastecimento.*,(tbAbastecimento.aba_hodometro - Anterior.aba_hodometro) As Dif, ((tbAbastecimento.aba_hodometro - Anterior.aba_hodometro) / tbAbastecimento.aba_litros) AS Media, IIf(IsNull(tbAbastecimento.aba_id - Anterior.aba_id), 0, tbAbastecimento.aba_id - Anterior.aba_id) AS Diferenca FROM tbAbastecimento LEFT JOIN (SELECT * FROM tbAbastecimento) AS Anterior ON tbAbastecimento.aba_id > Anterior.aba_id) AS X INNER JOIN (SELECT tbAbastecimento.aba_id, MIN(IIf(IsNull(tbAbastecimento.aba_id - Anterior.aba_id), 0, tbAbastecimento.aba_id - Anterior.aba_id)) AS Diferenca FROM tbAbastecimento LEFT JOIN (SELECT * FROM tbAbastecimento) AS Anterior ON tbAbastecimento.aba_id > Anterior.aba_id GROUP BY tbAbastecimento.aba_id) AS Y ON (X.aba_id = Y.aba_id) AND (X.Diferenca = Y.Diferenca)) INNER JOIN tbVeiculos ON X.vei_id = tbVeiculos.vei_id ORDER BY tbVeiculos.vei_placa, X.aba_data;
Esse SELECT faz o seguinte ele captura as informações que tem lançada na tabela e procura o valor anterior daquele lançamento, só que?!?!?!?!?!
ao passar para qualquer placa que não seja a primeira o calculo sempre capturar o ultimo hodômetro da placa anterior sendo que a primeira de qualquer veÃculo vai ser 0(zero a diferenca)
como posso resolver isso
FILMAN descreve um exemplo do que a query deve fazer
OK Marcelo, Seguinte
Essa Query esta fazendo o seguinte:
Percorrendo todas as linhas da tabela ordenado por DATA e PLACA do veÃculo
ao percorrer uma linha ela verifica se existe uma linha anterior a atual linha se existe faz a diferença do hodometro Atual menos o Anterior dividido pelo o litro bastecido atual
desse jeito eu faço a média de KM / Litro.
Só que tudo esta funcionando beleza mais com apenas um detalhe ao mudar de PLACA a primeira DATA da placa sempre tem que ser a diferença de hodometro e média
zerados só que não é isso que esta acontecendo
Ao mudar de placa a mesma captura o ultimo hodometro da placa anterior é esse o verdadeiro problema ou seja somente a primeira sai correta as proximas sempre captura
o ultimo hodometro anterior
Segue anexo a tabela com a consulta
Abra a consulta e verifique o que estou tentando mostrar
Essa Query esta fazendo o seguinte:
Percorrendo todas as linhas da tabela ordenado por DATA e PLACA do veÃculo
ao percorrer uma linha ela verifica se existe uma linha anterior a atual linha se existe faz a diferença do hodometro Atual menos o Anterior dividido pelo o litro bastecido atual
desse jeito eu faço a média de KM / Litro.
Só que tudo esta funcionando beleza mais com apenas um detalhe ao mudar de PLACA a primeira DATA da placa sempre tem que ser a diferença de hodometro e média
zerados só que não é isso que esta acontecendo
Ao mudar de placa a mesma captura o ultimo hodometro da placa anterior é esse o verdadeiro problema ou seja somente a primeira sai correta as proximas sempre captura
o ultimo hodometro anterior
Segue anexo a tabela com a consulta
Abra a consulta e verifique o que estou tentando mostrar
Existe outra maneira de fazer isso?
Estou aberto a sugestões
Obrigado
Estou aberto a sugestões
Obrigado
Filmam desculpe não ajudar mas fiquei tontinho com a query, e como não companho o seu projeto não consigo ver o que pode ser modificado
Desculpe pessoal mais enviei o arquivo errado
Segue o banco com a consulta onde esta a query
Caso tenham alguma ideia melhor de como fazer isso estou On-Line
Abraços Valeu
Segue o banco com a consulta onde esta a query
Caso tenham alguma ideia melhor de como fazer isso estou On-Line
Abraços Valeu
Galera muito obrigado mais consegui resolver
A solução foi tratar a identificação da placa
A solução foi tratar a identificação da placa
Tópico encerrado , respostas não são mais permitidas