我有一个MySQL表“stats”,这是每次登录网站的条目列表。每个条目都有一个“ userId ”字符串,一个“ loginTime ”时间戳和其他字段。每个用户可以有多个条目 - 每次登录一个。我想编写一个查询,计算30天内每日独特登录的平均值。 有什么想法吗?
答案 0 :(得分:1)
/ * 这应该为每个日期和该日期的唯一访问提供一行 * /
SELECT DATE(loginTime)LoginDate,COUNT(userID)UserCount
FROM stats
WHERE DATE(loginTime)BETWEEN [开始日期]和[结束日期]
GROUP BY DATE(登录时间),userID
注意:如果您能提供一些您想要的结果的样本数据会更有帮助。
答案 1 :(得分:0)
我可能错了,但是如果你这样做了select count(distinct userid) from stats where logintime between start of :day and end of day
,那么在这30天的每一天中day
取出了30个计数(可以预先计算缓存(因为你可能没有)用户在过去登录时))他们只是用您从
我在看的时候看了http://unganisha.org/home/pages/Generating_Sequences_With_SQL/index.html并且想到你是否有一张表,说数字0到30可以为这个例子命名它的偏移量:
select avg(userstoday)
from (select count(userid) as userstoday, day
from stats join offsets on (stats.logintime=(current_day)-offsets.day)
group by day)
正如我所指出的,用户现在的价值可以预先计算并存储在表格中
答案 2 :(得分:0)
谢谢大家,最终我用过:
SELECT SUM(uniqueUsers
)/ 30 AS DAU
FROM(
SELECT DATE(loginTime
)AS DATE,COUNT(DISTINCT userID
)AS uniqueUsers
来自user_requests
日期(loginTime
)> DATE_SUB(CURDATE(),INTERVAL 30
天 )
GROUP BY DATE(loginTime
)
)AS daily_users
我使用SUM并除以30而不是平均值,因为在某些日子里我可能没有任何登录,我想要考虑到这一点。但是在任何日常交通繁忙的网站上,只需使用AVG即可获得相同的结果