Generellt sett var SQL inte riktigt avsett att ge "löpande totaler" som du önskar. Andra RDBMS har introducerat proprietära tillägg för att leverera analytiska funktioner som möjliggör beräkningar av detta slag, men MySQL saknar sådana funktioner.
Istället har man i stort sett fyra alternativ. Utan särskild ordning:
-
Samla en löpande summa i din applikation, när du loopar över resultatuppsättningen;
-
Ändra ditt schema för att hålla reda på en löpande summa i din databas (särskilt bra i situationer som denna, där ny data bara läggs till "till slutet");
-
Gruppera en självanslutning:
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
-
Samla den löpande summan i en användarvariabel :
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