MySQL如何统计数据表中每个用户的每周视频浏览次数?
MySQL 按用户按周统计浏览次数实现方案
首先假设你的浏览记录表名为view_records,如果实际表名不同可自行替换。
实现思路
- 先将每条记录的
when_added字段换算为对应周的开始、结束日期 - 按
user_id、周开始/结束日期分组,统计分组内的记录数即为当周浏览次数
注:默认按国内习惯以周一作为每周第一天,如果需要以周日为每周第一天可以调整对应函数参数。
可直接运行的SQL语句
SELECT user_id, -- 拼接周时间段,格式为X月X日-X月X日 CONCAT( MONTH(week_start), '月', DAY(week_start), '日', '-', MONTH(week_end), '月', DAY(week_end), '日' ) AS 周时间段, COUNT(*) AS 当周浏览次数 FROM ( SELECT user_id, when_added, -- 计算当周周一的日期 DATE_SUB( DATE(when_added), INTERVAL (WEEKDAY(when_added)) DAY ) AS week_start, -- 计算当周周日的日期 DATE_ADD( DATE(when_added), INTERVAL (6 - WEEKDAY(when_added)) DAY ) AS week_end FROM view_records ) t GROUP BY user_id, week_start, week_end ORDER BY user_id, week_start;
关键函数说明
WEEKDAY(date):返回日期对应的星期索引,周一为0,周日为6,刚好适配国内周起始习惯DATE_SUB/DATE_ADD:用来根据当前日期偏移计算周的起止日期CONCAT:用来拼接你需要的“X月X日-X月X日”格式的时间段文本
可选调整项
如果需要以周日作为每周第一天,只需要把子查询里的week_start和week_end计算逻辑替换为以下内容即可:
-- 周起始为周日的计算逻辑 DATE_SUB(DATE(when_added), INTERVAL (DAYOFWEEK(when_added)-1) DAY) AS week_start, DATE_ADD(DATE(when_added), INTERVAL (7 - DAYOFWEEK(when_added)) DAY) AS week_end
内容的提问来源于stack exchange,提问作者Percival test
相关产品推荐
相关产品推荐

