2017-02-19 11 views
0

Hier ist die Probe meines table mit einigem Beispiel Data-MySQL kumulative Summe gibt falsches Ergebnis

Die seltsamen Dinge passieren, während kumulative Summe der Differenz zwischen den Spalten gorivo.PovratKM und gorivo.PolazakKM und gleich für gorivo.UkupnoGorivo machen .

Die kumulierten Summen sind in der Spalte SumUkKM für Differenz zwischen gorivo.PovratKM und gorivo.PolazakKM und für kumulative Summe für gorivo.UkupnoGorivo ist Spalte SumGorivo.

Die Ausgabe sollte so etwas wie sein:

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

Was mache ich falsch in meiner Anfrage?

Antwort

2

MySql ermöglicht Variablen im SQL-Satz zu deklarieren, (select @SumUkGorivo := 0, @SumUkKM := 0) x der CROSS JOIN ermöglicht es, den Wert für jede Zeile der anderen Tabelle zu berechnen.

Mit Variablen können Sie zum Beispiel Reset-Punkte oder Partitionen auf dieselbe Weise setzen wie SUM() OVER (PARTITION BY von anderen Dmbs wie SQL oder Postgres verwendet wird.

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

Vielen Dank! Ich hatte keine Idee, die auf diesem Weg gelöst werden könnte. – Josef

+0

Ich bin froh, helfen zu können. – McNets

+0

@McNets Es ist interessant, eine Schleife in SQL zu machen. Können Sie bitte das Verhalten dieser Abfrage aufschlüsseln? Kannst du bitte auch das Verhalten erklären wenn '(@SumUkGorivo: = 0, @SumUkKM: = 0) x,' auskommentiert ist? - '@ SumUkkm' beginnt mit 9854 (das ist die letzte Summe der Differenzen) anstelle von 0. So geht das 11084 (9854 + 1230), 11960 (9854 + 1230 + 876) ... Warum? – user104309