MySQL Query для поиска ежемесячного активного пользователя - PullRequest
1 голос
/ 05 декабря 2011

У меня есть следующая таблица:

CREATE TABLE account (
  account_id bigint(20) NOT NULL AUTO_INCREMENT,
  time_start datetime NOT NULL,
  time_end datetime DEFAULT NULL,
  PRIMARY KEY (account_id),
  KEY idx_start (account_id,time_start),
  KEY idx_end (account_id,time_end)
) ENGINE=MyISAM 

Как мне написать запрос, чтобы узнать, сколько пользователей входит в систему ежемесячно?

Я хочу узнать за последние 90 дней, сколько разных account_id в группе таблиц по месяцам. Группировать по месяцам здесь означает каждые 30 дней: например, с 2011-12-05 по 2011-11-06, с 2011-12-04 по 2011-11-05 и т. Д. За последние 90 дней.

Ответы [ 3 ]

2 голосов
/ 05 декабря 2011

Вы можете тривиально получить годы / месяцы из поля даты и времени с YEAR() и MONTH() соответственно. Но ваши периоды не совпадают с началом / концом на границах месяца, поэтому вам понадобится некрасиво выглядящая логика запросов для обработки этого преобразования.

Вы должны начать с написания хранимой функции / процедуры , которая преобразует обычную дату / время в «фискальную» дату, после чего запрос должен выглядеть намного чище. После завершения процедуры ее можно использовать везде, поскольку расчеты финансового периода, несомненно, будут повторяться и в других местах.

1 голос
/ 05 декабря 2011

попробуйте

select count(distinct account_id)
from account
where 
time_start >= date_sub(now(), interval 90 day)
group by
floor(datediff(now(), time_start) / 30)
1 голос
/ 05 декабря 2011

Этот запрос предполагает две вещи: 1) у вас есть логика месяца в квадрате (см. Сообщение @ Marc) и добавлена ​​в качестве дополнительного столбца (месяца) в таблице.2) time_start - это время, когда пользователь "вошел в систему".

SELECT COUNT(*), month
FROM account
GROUP BY month
HAVING time_start > ADDDATE(CURDATE(),- INTERVAL 90 DAY);

Попробуйте поиграться с ним и посмотреть, поможет ли это.Я не слишком уверен в отрицательном бите ADDDATE, так что вы захотите проверить справочную страницу MySQL для функций даты и времени .

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