Thật không may, MySQL không cung cấp các chức năng phân tích, giống như Oracle và SQL Server.
Một cách để có được "tổng số đang chạy" là sử dụng một biến người dùng, giống như sau:
SELECT t.Date
, t.NewUsers
, @rt := @rt + t.NewUsers AS `Running Total`
FROM (SELECT @rt := 0) i
JOIN (
SELECT DATE_FORMAT(created,'%Y%m%d') AS `Date`
, COUNT(item_id) as `NewUsers`
FROM AP_user
WHERE YEAR(created) > 2011
AND user_groups = '63655'
AND user_active = 1
AND userID NOT IN $excludedUsers
GROUP BY DATE_FORMAT(created,'%Y-%m')
ORDER BY DATE_FORMAT(created,'%Y-%m') ASC
) t
LƯU Ý:Hành vi của các biến bộ nhớ như được sử dụng ở trên không được đảm bảo trong ngữ cảnh này. Nhưng nếu chúng ta cẩn thận với truy vấn, chúng ta có thể nhận được kết quả có thể đoán trước, có thể lặp lại trong các câu lệnh SELECT. Hành vi của các biến bộ nhớ có thể thay đổi trong bản phát hành trong tương lai, khiến phương pháp này không thể hoạt động được.
LƯU Ý:Về cơ bản, tôi đã gói truy vấn của bạn trong dấu ngoặc đơn và đặt cho nó một bí danh như một dạng xem nội tuyến (cái mà MySQL gọi là "bảng dẫn xuất"). Tôi đã thực hiện một vài thay đổi đối với truy vấn của bạn, GROUP BY của bạn có khả năng nhóm tháng 1 năm 2012 cùng với tháng 1 từ năm 2013, tôi đã thay đổi điều đó. Tôi cũng đã thêm điều khoản ORDER BY.