Отчет по зарегистрированным пользователям одним запросом

Рейтинг: 1Ответов: 1Опубликовано: 06.10.2014

У меня есть таблица в mysql (InnoDB), в которой указывается, когда пользователь был зарегистрирован.
Помогите, пожалуйста, составить запрос в базу, который предоставит данные, количество пользователей которые зарегистрировались и были зарегистрированы по месяцам. У меня есть запрос, который выводит количество зарегистрировавшихся юзеров по месяцам:

  SELECT 
   COUNT(id) AS count, 
   DATE_FORMAT(sdate,'%Y-%m') AS date
  FROM 
   `site_users` 
  WHERE 
   sdate >= $table_date_from
   AND sdate < $table_date_to
  GROUP BY 
   date
  ORDER BY 
   date
  ASC

То есть результат получается примерно такой:

  • 2014-8 | 1
  • 2014-9 | 2
  • 2014-10 | 0

Но как сделать так, чтобы тех, кто зарегистрировался раньше, тоже посчитать.

То есть результат должен быть таким (с учетом, что раньше был зарегистрирован один пользователь):

  • 2014-8 | 2
  • 2014-9 | 4
  • 2014-10 | 4

Буду безмерно благодарен, если поможете. Ибо адекватных идей больше нет.

P.S. $date_from и $date_to -- как не сложно догадаться, переменные, которые указывают, за какой период времени вывести отчет.

Ответы

▲ 1Принят

Так:

SELECT s1.d, COUNT(s2.id) AS count
FROM 
   (SELECT DISTINCT DATE_FORMAT(sdate,'%Y-%m') d FROM `site_users`) s1 
   JOIN site_users s2 ON 
     s1.d>= DATE_FORMAT(s2.sdate,'%Y-%m')
WHERE s1.date  < $table_date_to   
GROUP BY s1.d
ORDER BY s1.d

Ну или чтоб не строки сравнивать, а числа (побыстрее будет) DATE_FROMAT(... заменить на EXTRACT(YEAR_MONTH FROM...