Ogólnie rzecz biorąc, SQL nie był tak naprawdę przeznaczony do generowania „ruchomych sum”, tak jak sobie tego życzysz. Inne RDBMS wprowadziły zastrzeżone rozszerzenia w celu dostarczania funkcji analitycznych, które umożliwiają tego rodzaju obliczenia, ale MySQL nie ma takich funkcji.
Zamiast tego, ogólnie rzecz biorąc, ma cztery opcje. W dowolnej kolejności:
-
Gromadź bieżącą sumę w swojej aplikacji, gdy przeglądasz zestaw wyników;
-
Zmień swój schemat, aby śledzić bieżące sumy w bazie danych (szczególnie przydatne w sytuacjach takich jak ta, gdzie nowe dane są zawsze dołączane „na końcu”);
-
Grupuj samodołączenie:
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
-
Zbierz bieżącą sumę w zmiennej użytkownika :
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