MySQL 累计总和给出了错误的结果

MySQL cumulative sum gives wrong result

这是我的 table 样本和一些样本数据-

在计算 gorivo.PovratKM 和 gorivo.PolazakKM 列之间差异的累积和时发生了奇怪的事情,gorivo.UkupnoGorivo 也是如此。

累积总和在 SumUkKM 列中,用于 gorivo.PovratKM[=34= 之间的差异] 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    |                 
+-------------+------------+-------------+------------+

我的查询有什么问题?

MySql允许在sql语句中声明变量,(select @SumUkGorivo := 0, @SumUkKM := 0) xCROSS JOIN允许为其他table的每一行计算其值。

例如,您可以使用变量设置重置点或分区,与 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
;