Malheureusement, MySQL ne fournit pas de fonctions analytiques, contrairement à Oracle et SQL Server.
Une façon d'obtenir un "total cumulé" consiste à utiliser une variable utilisateur, quelque chose comme ceci :
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
REMARQUE :Le comportement des variables de mémoire comme celles utilisées ci-dessus n'est pas garanti dans ce contexte. Mais si nous sommes prudents avec la requête, nous pouvons obtenir des résultats prévisibles et reproductibles dans les instructions SELECT. Le comportement des variables de mémoire peut changer dans une future version, rendant cette approche inapplicable.
REMARQUE:j'ai essentiellement mis votre requête entre parenthèses et lui ai donné un alias en tant que vue en ligne (ce que MySQL appelle une "table dérivée"). J'ai apporté quelques modifications à votre requête, votre GROUP BY a le potentiel de regrouper janvier 2012 avec janvier à partir de 2013, j'ai changé cela. J'ai également ajouté une clause ORDER BY.