以下是我的table示例,其中包含一些示例数据 -
奇怪的事情发生在gorivo.PovratKM和gorivo.PolazakKM列之间的累积差异时,gorivo.UkupnoGorivo也是如此。
对于 gorivo.PovratKM 和 gorivo.PolazakKM 之间的差异以及 gorivo的累积总和,累积总和位于 SumUkKM 列中.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 |
+-------------+------------+-------------+------------+
我在查询中做错了什么?
答案 0 :(得分:2)
MySql允许在sql语句中声明变量,(select @SumUkGorivo := 0, @SumUkKM := 0) x
CROSS JOIN允许计算其他表的每一行的值。
使用变量,您可以使用与SUM() OVER (PARTITION BY
相同的方式设置重置点或分区,而不是其他dmb,如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
;