Как группировать по месяцам и годам, когда есть только поле даты и времени? - PullRequest
8 голосов
/ 13 октября 2009

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

TRANSACTION (< transactionid >, amount, when)

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

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

Ответы [ 5 ]

18 голосов
/ 13 октября 2009

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

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
5 голосов
/ 13 октября 2009
    SELECT EXTRACT(YEAR_MONTH FROM when), sum(amount)
      FROM TRANSACTION
  GROUP BY EXTRACT(YEAR_MONTH FROM when)
3 голосов
/ 13 октября 2009

Я всегда использовал MONTH () и YEAR () ... что для меня немного похоже на Hack, но это работает ...

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

Или все наоборот? думает

Бобби

2 голосов
/ 13 октября 2009

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

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.

1 голос
/ 13 октября 2009

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

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