2017-02-19 46 views
0

这里是我的table样品一些样品,同时使列gorivo.PovratKM和gorivo.PolazakKM和同为gorivo.UkupnoGorivo之间的差异累积和数据 -MySQL的累计总和给出错误的结果

奇怪的事情发生。

的累加和在柱SumUkKM为差gorivo.PovratKMgorivo.PolazakKM之间以及用于累加和为gorivo.UkupnoGorivo柱SumGorivo

输出应该是这样的:

+-------------+------------+-------------+------------+ 
| Polazak KM | Povratal KM| Prijedeno KM| SumUkKM | 
+-------------+------------+-------------+------------+ 
| 814990  | 816220  |  1230 | 1230 |     
+-------------+------------+-------------+------------+ 
| 816220  | 817096  |  876 | 2106 |     
+-------------+------------+-------------+------------+ 
| 817096  | 817124  |  28  | 2134 |     
+-------------+------------+-------------+------------+ 
| 817124  | 818426  |  1302 | 3436 |     
+-------------+------------+-------------+------------+ 

我在做什么错在我的查询?

回答

2

MySql允许声明sql语句中的变量,(select @SumUkGorivo := 0, @SumUkKM := 0) x CROSS JOIN允许为另一个表的每一行计算其值。

使用变量,例如,您可以设置重置点或分区的方式与SUM() OVER (PARTITION BY相同,但由其他dmbs如SQL或Postgres使用。

SELECT 
    y.`PolazakKM`, y.`PovratakKM`, 
    @SumUkGorivo := @SumUkGorivo + `UkupnoGorivo` as SumUkGorivo, 
    @SumUkKM := @SumUkKM + (y.`PovratakKM` - y.`PolazakKM`) as SumUkKM 
FROM 
    (select @SumUkGorivo := 0, @SumUkKM := 0) x, 
    (select gorivo.`PolazakKM`, gorivo.`PovratakKM`, gorivo.`UkupnoGorivo` 
    from gorivo WHERE gorivo.`IDVozilo` = 131 
    order by `DatumT`) y 
; 
+0

非常感谢!我没有想法可以通过这种方式解决。 – Josef

+0

我很高兴能够提供帮助。 – McNets

+0

@McNets在SQL中执行循环很有趣。你能否分解这个查询的行为?你也可以解释一下'(选择@SumUkGorivo:= 0,@SumUkKM:= 0)x,'是否被注释掉? - '@ SumUkkm'以9854(这是差异的最后总和)开始,而不是0.所以它就像11084(9854 + 1230),11960(9854 + 1230 + 876)...为什么? – user104309