Helaas biedt MySQL geen analytische functies, zoals Oracle en SQL Server.
Een manier om een "lopend totaal" te krijgen is door gebruik te maken van een gebruikersvariabele, zoiets als dit:
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
OPMERKING:Het gedrag van geheugenvariabelen zoals hierboven gebruikt, is in deze context niet gegarandeerd. Maar als we voorzichtig zijn met de query, kunnen we voorspelbare, herhaalbare resultaten krijgen in SELECT-instructies. Het gedrag van geheugenvariabelen kan in een toekomstige release veranderen, waardoor deze aanpak onwerkbaar wordt.
OPMERKING:ik heb uw zoekopdracht in feite tussen haakjes geplaatst en een alias gegeven als een inline-weergave (wat MySQL een "afgeleide tabel" noemt). Ik heb een paar wijzigingen aangebracht in uw zoekopdracht, uw GROUP BY heeft het potentieel om januari 2012 te groeperen met januari vanaf 2013, dat heb ik gewijzigd. Ik heb ook een ORDER BY-clausule toegevoegd.