我有下表:
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天。
答案 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)