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

У кого-нибудь была идея, как запросить базу данных 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

Ответы [ 3 ]

7 голосов
/ 18 февраля 2011

Я не знаком со структурой базы данных vBulletin, но вы должны сделать что-то вроде этого , предполагая, что в вашей пользовательской таблице есть столбец даты / даты-времени / времени 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;
0 голосов
/ 02 марта 2011

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

SELECT
    DATE_FORMAT(FROM_UNIXTIME(dateline), '%m/%Y') AS month,
    SUM(nuser) AS new_users
FROM stats
GROUP BY month
ORDER BY dateline
0 голосов
/ 18 февраля 2011

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...