Ir para conteúdo

POWERED BY:

Arquivado

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

FernandoPhP

Erro na SUM com GROUP BY e duas tabelas

Recommended Posts

Tenho duas tabelas, caminhao e abatecimentos com a seguintes estrutura:

 

 CREATE TABLE IF NOT EXISTS `abastecimentos` (
 `Id` int(255) NOT NULL auto_increment,
 `IdPlaca` int(255) NOT NULL,
 `IdMotorista` int(255) NOT NULL,
 `Data` date NOT NULL,
 `IdPosto` int(255) NOT NULL,
 `ValorNF` decimal(10,2) NOT NULL,
 `QtDiesel` decimal(10,2) NOT NULL,
 `KmFinal` int(255) NOT NULL,
 `Trancar` int(1) NOT NULL,
 PRIMARY KEY  (`Id`),
 KEY `IdPosto` (`IdPosto`),
 KEY `IdPlaca` (`IdPlaca`),
 KEY `IdMotorista` (`IdMotorista`),
 KEY `KmFinal` (`KmFinal`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=934 ; 

 

 CREATE TABLE IF NOT EXISTS `caminhao` (
 `Id` int(255) NOT NULL auto_increment,
 `Placa` varchar(8) NOT NULL,
 `IdTipoCaminhao` int(255) NOT NULL,
 `Ano` int(4) NOT NULL,
 `Km` int(255) NOT NULL,
 `IdMarca` int(100) NOT NULL,
 `IdModelo` int(255) NOT NULL,
 `Chassis` varchar(100) NOT NULL,
 `Propriedade` int(1) NOT NULL,
 `Trancar` int(1) NOT NULL,
 `Inativo` int(1) NOT NULL,
 PRIMARY KEY  (`Id`),
 KEY `IdModelo` (`IdModelo`),
 KEY `IdMarca` (`IdMarca`),
 KEY `IdTipoCaminhao` (`IdTipoCaminhao`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=98 ;

 

Estou querendo criar um relatório, nele preciso dos Km Rodados, da Média gasta de combustivel e dos valores pagos pelos abastecimentos, estou usando a seguinte QUERY SQL:

 
SELECT  `caminhao`.`Id`, @dv :=  `abastecimentos`.`IdPlaca`, @dt :=  `abastecimentos`.`KmFinal` , @dx := IFNULL( ( SELECT  `KmFinal` AS  'G' FROM  `abastecimentos`  WHERE  `KmFinal` < @dt  AND  `IdPlaca` = @dv  ORDER BY  `KmFinal` DESC  LIMIT 0 , 1 ),  `caminhao`.`Km` ) AS  'KmInicial', SUM(  `abastecimentos`.`KmFinal` - @dx ) AS  'Km', SUM( ( `abastecimentos`.`KmFinal` - @dx ) /  `abastecimentos`.`QtDiesel`) AS  `Media` , SUM(  `abastecimentos`.`ValorNF` ) AS  'ValorNF' FROM  `abastecimentos` ,  `caminhao`  WHERE  `abastecimentos`.`IdPlaca` =  `caminhao`.`Id`  GROUP BY  `caminhao`.`Id`

 

o que está acontecendo é que os valores pagos, ValorNF está retornando corretamente, os demais estão errados, estão retornando resultados diferentes dos correos, valores muito superiores. Como posso resolver isso? Alguem tem alguma idéia?

Compartilhar este post


Link para o post
Compartilhar em outros sites
... nele preciso dos Km Rodados, da Média gasta de combustivel e dos valores pagos pelos abastecimentos ...

 

Por "placa"

 

select IdPlaca,sum(KmFinal) KmFinal,avg(KmFinal/QtDiesel) media, sum(ValorNF) totValorNF
from abastecimentos
group by IdPlaca

 

 

mas creio que isto precisa ser refinado, só a ideia básica.

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.