一般的に言って、SQLは、あなたが望むような「現在の合計」を生成することを実際には意図していませんでした。他のRDBMSは、この種の計算を可能にする分析関数を提供する独自の拡張機能を導入していますが、MySQLにはそのような機能がありません。
代わりに、大きく4つのオプションがあります。順不同:
-
結果セットをループしながら、アプリケーションに現在の合計を累積します。
-
データベース内の現在の合計を追跡するようにスキーマを変更します(特に、新しいデータが「最後まで」追加されるだけのこのような状況で適しています)。
-
自己参加をグループ化する:
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
-
ユーザー変数 に現在の合計を累積します :
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