Попробуйте (обновлено, чтобы ответить на ваш «edit3»):
SELECT
YEAR(created) as year,
MONTH(created) AS month,
SUM(amount) AS total_amount
FROM table1
WHERE created
BETWEEN DATE(NOW()) - INTERVAL (DAY(NOW()) - 1) DAY - INTERVAL 11 MONTH
AND NOW()
GROUP BY YEAR(created), MONTH(created)
ORDER BY YEAR(created), MONTH(created);
Пример результата (при запуске в апреле 2010 года):
year month total_amount
2009 5 26
2010 1 20
Обратите внимание, что месяцы без записей вообще не будут возвращаться (вместо того, чтобы возвращаться с total_amount = 0).
Данные испытаний:
CREATE TABLE table1 (created datetime NOT NULL, amount INT NOT NULL);
INSERT INTO table1 (created, amount) VALUES
('2010-01-01 13:56:23', 5),
('2010-01-04 13:56:23', 15),
('2009-05-04 13:56:23', 26);