2017-02-19 2 views
0

Вот образец моей table с некоторым образцом data-MySQL накопленная сумма дает неправильный результат

странные вещи происходит, делая накопленную сумму разницы между столбцами gorivo.PovratKM и gorivo.PolazakKM и то же самое для gorivo.UkupnoGorivo ,

Совокупные суммы в столбце SumUkKM для разности между gorivo.PovratKM и gorivo.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. Не могли бы вы нарушить поведение этого запроса? Также вы можете объяснить поведение, когда '(select @SumUkGorivo: = 0, @SumUkKM: = 0) x,' закомментировано? - '@ SumUkkm' начинается с 9854 (что является окончательной суммой различий) вместо 0. Таким образом, он выглядит примерно так: 11084 (9854 + 1230), 11960 (9854 + 1230 + 876) ... Почему? – user104309

Смежные вопросы