MySQL bohužel neposkytuje analytické funkce, jako Oracle a SQL Server.
Jedním ze způsobů, jak získat „průběžný součet“, je použít uživatelskou proměnnou, něco takového:
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
POZNÁMKA:Chování paměťových proměnných, jak je uvedeno výše, není v tomto kontextu zaručeno. Ale pokud jsme s dotazem opatrní, můžeme získat předvídatelné, opakovatelné výsledky v příkazech SELECT. Chování paměťových proměnných se může v budoucí verzi změnit, takže tento přístup nebude použitelný.
POZNÁMKA:V podstatě jsem váš dotaz zabalil do závorek a dal mu alias jako inline pohled (což MySQL nazývá „odvozená tabulka“). Udělal jsem pár změn ve vašem dotazu, vaše GROUP BY má potenciál seskupit leden 2012 spolu s lednem z roku 2013, změnil jsem to. Také jsem přidal klauzuli ORDER BY.