In generale, SQL non era realmente destinato a produrre "totali correnti" come desideri. Altri RDBMS hanno introdotto estensioni proprietarie per fornire funzioni analitiche che consentono calcoli di questo tipo, ma MySQL non dispone di tali funzionalità.
Invece, uno ha sostanzialmente quattro opzioni. In nessun ordine particolare:
-
Accumula un totale parziale nella tua applicazione, mentre esegui il ciclo sul set di risultati;
-
Modifica il tuo schema per tenere traccia di un totale parziale all'interno del tuo database (particolarmente utile in situazioni come questa, in cui i nuovi dati vengono aggiunti solo "fino alla fine");
-
Raggruppa un self-join:
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
-
Accumula il totale parziale in una variabile utente :
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