Как сгруппировать строки MySql по месяцам? - PullRequest
2 голосов
/ 05 апреля 2010

У меня есть таблица с датой и временем (формат: 'Y-m-d H: i: s'), созданным полем и полем «количество» (целое число) в каждой строке. Теперь я хочу узнать итоговую сумму за месяц в прошлом году. Как я могу это сделать?

EDIT

Я внес изменения, чтобы прояснить реальную проблему. так что в основном я хочу знать общую сумму в каждом месяце, но только за последний год.

EDIT2

Прошлый год означает последние 365 дней. Так где-нибудь я должен рассмотреть «текущий день»?

EDIT3

Мой плохой, на самом деле прошлый год длился 12 месяцев. Таким образом, количество дней будет между 336 и 365.

Ответы [ 3 ]

8 голосов
/ 05 апреля 2010

Попробуйте (обновлено, чтобы ответить на ваш «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);
2 голосов
/ 05 апреля 2010

Возвращает счет и общую сумму за прошлый год:

SELECT MONTH(created) as month_updated,
  COUNT(created) as month_updates, SUM(amount) as month_total FROM table
WHERE created BETWEEN DATE_ADD(NOW(), INTERVAL -1 YEAR) AND NOW()
GROUP BY MONTH(created)

Или, если вы конкретно имеете в виду только 2009:

SELECT MONTH(created) as month_updated,
  COUNT(created) as month_updates, SUM(amount) as month_total FROM table
WHERE created BETWEEN '2009-01-01 00:00:00' AND '2009-12-31 23:59:59'
GROUP BY MONTH(created)
0 голосов
/ 05 апреля 2010
SELECT count(some_row) AS or_whatever FROM your_table GROUP BY MONTH(update);

Чтобы быть более конкретным (с вашим обновлением):

SELECT SUM(amount) FROM table_name GROUP BY MONTH(created);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...