Im Allgemeinen war SQL nicht wirklich dazu gedacht, "laufende Summen" zu liefern, wie Sie es wünschen. Andere RDBMS haben proprietäre Erweiterungen eingeführt, um Analysefunktionen bereitzustellen, die Berechnungen dieser Art ermöglichen, aber MySQL fehlen solche Funktionen.
Stattdessen hat man im Großen und Ganzen vier Optionen. In keiner bestimmten Reihenfolge:
-
Akkumulieren Sie eine laufende Summe in Ihrer Anwendung, während Sie die Ergebnismenge durchlaufen;
-
Ändern Sie Ihr Schema, um eine laufende Summe in Ihrer Datenbank zu verfolgen (besonders gut in Situationen wie dieser, wo neue Daten immer nur "bis zum Ende" angehängt werden);
-
Gruppieren Sie einen Selbstbeitritt:
SELECT a.Sale_Date, SUM(a.Stock_Delivered) AS Stock_Delivered, SUM(a.Units_Sold) AS Units_Sold, SUM(b.Stock_Delivered - b.Units_Sold) AS `Stock Balance` FROM sales_report a JOIN sales_report b ON b.Sale_Date <= a.Sale_Date GROUP BY a.Sale_Date
-
Akkumulieren Sie die laufende Summe in einer Benutzervariable :
SELECT Sale_Date, Stock_Delivered, Units_Sold, @t := @t + Stock_Delivered - Units_Sold AS `Stock Balance` FROM sales_report, (SELECT @t:=0) init ORDER BY Sale_Date