MySQL Query查找每月活跃用户

时间:2011-12-05 15:46:02

标签: mysql sql

我有下表:

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 个答案:

答案 0 :(得分:2)

您可以分别使用YEAR()MONTH()从日期时间字段中获得数年/月。但是你的句号与月份边界上的开始/结束不匹配,所以你需要一些丑陋的查询逻辑来处理这种转换。

您应首先编写一个stored function/procedure,将常规日期/时间转换为“财政”日期时间,之后查询应该变得更清晰。一旦你完成了程序,它就可以在任何地方重复使用,因为财政期间的计算无疑也会在其他地方重复。

答案 1 :(得分:1)

此查询假设有两件事: 1)你的月份逻辑平方(参见@ Marc的帖子)并在表格中添加了一个额外的列(月份)。 2)time_start是用户“登录”的时间。

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

尝试搞乱它,看看是否有帮助。我对那里的负ADDDATE位不太确定,所以你需要查看MySQL的date and time functions参考页面。

答案 2 :(得分:1)

试试这个

select count(distinct account_id)
from account
where 
time_start >= date_sub(now(), interval 90 day)
group by
floor(datediff(now(), time_start) / 30)