我想知道用户每周访问网站“A”的平均日期。如果用户没有访问网站“A”,我会排除数据(例如,id = 2)。而且我还需要考虑日期范围(将其限制在一周范围内,例如 01-JAN-2018 到 07-JAN-2018)
示例输入(表:用户)
id date website
1 01-JAN-2018 A
1 03-JAN-2018 B
1 04-JAN-2018 C
1 04-JAN-2018 C
2 03-JAN-2018 C
3 03-JAN-2018 A
3 05-JAN-2018 B
4 05-JAN-2018 A
第一步会像这样:
id date website
1 01-JAN-2018 A
1 03-JAN-2018 B
1 04-JAN-2018 C
1 04-JAN-2018 C
3 03-JAN-2018 A
3 05-JAN-2018 B
4 05-JAN-2018 A
输出将只返回用户访问网站(包括 ABC)的平均日期。在这种情况下,用户 1 每周访问三天(忽略重复),用户 3 每周访问两天。平均点击日期将是总和(天)/用户数。
我的第一个想法:
SELECT COUNT(Date), Date
FROM user
WHERE id IN (
SELECT id FROM user
WHERE web = 'A'
);
假设我只想考虑本周范围(2018 年 1 月 1 日至 2018 年 1 月 7 日)。我想计算一周内访问的平均日期。对此有什么想法吗?谢谢!
最佳答案
如果你想按一周内的点击率分组,你可以尝试更像这样的方法:
select year(STR_TO_DATE(date,'%d-%b-%y')) year,
weekofyear(STR_TO_DATE(date,'%d-%b-%y')) week,
count(*) hits
from user
group by year(STR_TO_DATE(date,'%d-%b-%y')), weekofyear(STR_TO_DATE(date,'%d-%b-%y'))
分组依据是关键:这会将特定一周的所有点击分组在一起,而 group by date
会将每一天分开。
如果您想要多个星期的平均值,您需要将此查询用作子查询,并对计数列进行平均。
如评论中所述,如果将日期存储为 date
而不是 varchar
,这会容易得多(更不用说效率更高了)
关于mysql - 访问网站的平均日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49101668/