Как мне группировать по месяцам и годам, когда у вас есть только поле даты?

У меня есть схема таблицы, которая по сути представляет собой кучу информации о транзакции с полем datetime

TRANSACTION (< transactionid >, amount, when) 

Мне нужно генерировать ежемесячную сумму транзакций, которая представляет собой СУММ (сумма), но я был в тупике от того, что я группирую. Каждая строка из SQL должна содержать месячную сумму (так что одна строка для 09 января, 09 февраля …. январь 2010 и т. Д.). Я думаю, что мне, возможно, придется генерировать таблицу по коду, но хотелось бы узнать, есть ли способ разрешить это с помощью SQL.

Любая помощь будет оценена! (Использование MySQL 5.3, PHP5)

Вам нужно сгруппировать по выдержкам.

 SELECT SUM(amount) FROM transaction GROUP BY EXTRACT(MONTH FROM when), EXTRACT(YEAR FROM when) 

И если вам нужны эти столбцы, тогда

 SELECT EXTRACT(MONTH FROM when) as month, EXTRACT(YEAR FROM when) as year, SUM(amount) FROM transaction GROUP BY month, year 

Конечно, вы можете добавить ORDER BY и использовать короткие имена:

 SELECT EXTRACT(MONTH FROM when) as month, EXTRACT(YEAR FROM when) as year, SUM(amount) FROM transaction GROUP BY month, year ORDER BY year DESC, month DESC 
  SELECT EXTRACT(YEAR_MONTH FROM when), sum(amount) FROM TRANSACTION GROUP BY EXTRACT(YEAR_MONTH FROM when) 

Я всегда использовал MONTH () и YEAR () … который кажется мне немного похож на Hack, но он работает …

 SELECT SUM(amount) FROM yourTable GROUP BY MONTH(date), YEAR(date) 

Или это было наоборот? думает

Бобби

Я бы попробовал что-то вроде этого:

 SELECT YEAR(when) AS year, MONTH(when) AS month, SUM(amount) AS amount FROM TRANSACTION GROUP BY YEAR(when), MONTH(when) ORDER BY YEAR(when), MONTH(when) 

Это работает на MS SQL и также должно работать на MySQL.

Я думаю, вы хотите:

 SELECT SUM(amount) FROM yourTable GROUP BY CONCAT(YEAR(date), '-', MONTH(date))