En términos generales, SQL no tenía la intención de generar "totales acumulados" como usted desea. Otros RDBMS han introducido extensiones propietarias para brindar funciones analíticas que permiten cálculos de este tipo, pero MySQL carece de tales características.
En cambio, uno tiene en términos generales cuatro opciones. Sin ningún orden en particular:
-
Acumule un total acumulado en su aplicación, mientras recorre el conjunto de resultados;
-
Modifique su esquema para realizar un seguimiento de un total acumulado dentro de su base de datos (especialmente bueno en situaciones como esta, donde los datos nuevos solo se agregan "hasta el final");
-
Agrupar una autounión:
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
-
Acumule el total acumulado en una variable de usuario :
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