Как написать SQL-запрос, который подсчитывает количество строк в месяц и год?

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

MM/YYYY Count 01/2001 : 10 02/2001 : 12 ... ... 

Спасибо за ответы ниже. Моя последняя версия, которая работает, выглядит следующим образом:

 SELECT COUNT(*) as 'Registrations', YEAR(FROM_UNIXTIME(joindate)) as 'Year', MONTH(FROM_UNIXTIME(joindate)) as 'Month' FROM vbfuser GROUP BY Year,Month 

Related of "Как написать SQL-запрос, который подсчитывает количество строк в месяц и год?"

Я не знаком с структурой базы данных vBulletin, но вы должны сделать что-то вроде этого , предполагая, что ваша таблица пользователя имеет столбец даты / даты / времени / timestamp created_date или reg_timestamp или что-то похожее, используя функции MySQL YEAR () и MONTH () .

 select count(*) as count, year(reg_timestamp) as year month(reg_timestamp) as month from users group by year, month; 

Это приведет к чему-то подобному:

 +-------+-------+------+ | count | month | year | +-------+-------+------+ | 4 | 11 | 2008 | | 1 | 12 | 2008 | | 196 | 12 | 2009 | | 651 | 1 | 2010 | +-------+-------+------+ 

Изменить: относительно комментария Дейва: дата vBulletin, похоже, хранится в формате Unixtime. В этом случае просто перенос столбца с помощью FROM_UNIXTIME преобразует его в читаемую дату MySQL:

 select count(*) as count, year(from_unixtime(reg_timestamp)) as year month(from_unixtime(reg_timestamp)) as month from users group by year, month; 

vBulletin сохраняет ежедневную статистику, поэтому может быть лучше работать с этой таблицы. Это не большая проблема для подсчета новых регистраций, но если вы хотите подсчитать количество сообщений, это в конечном итоге станет дорогим. Вот пример, который делает то, что вы хотите:

 SELECT DATE_FORMAT(FROM_UNIXTIME(dateline), '%m/%Y') AS month, SUM(nuser) AS new_users FROM stats GROUP BY month ORDER BY dateline 

Вы должны сгруппировать по полю:

 select MONTHYEAR month , count(*) from tabname group by MONTHYEAR 

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

Если вы предоставите таблицу пользователей, это может быть более полезным;)