mysql - 从表中查找过去一年中每周至少完成一项活动的所有用户
问题描述
我有两个tables user [user_id,name]
和task [task_id,title,fk_user]
。我想找出过去 1 年中每周至少完成一项活动的用户表中的所有用户。例子
用户
user_id(primaryKey) name created_at
1 Alice 2018-05-03 10:22:56
2 Bob 2018-05-04 10:22:56
任务
task_id(primaryKey) title fk_user created_at
1 t1 1 2018-05-04 10:22:56
2 t2 1 2018-05-04 10:23:56
3 t1 2 2018-05-04 10:24:56
4 t2 2 2018-05-04 10:24:56
结果
user_every_week_in_past_year
1
2
解决方案
我认为这样的事情应该有效......如果没有完整的样本数据,很难确定:
SELECT name
FROM (SELECT u.name, COUNT(t.task_id) AS tasks
FROM user u
JOIN task t
ON t.fk_user = u.user_id
WHERE t.created_at > CURDATE() - INTERVAL 52 WEEK
GROUP BY u.name, WEEK(t.created_at)
) ut
GROUP BY name
HAVING COUNT(tasks) = 52
子查询生成过去 52 周内每个用户每周执行的任务数的列表。然后在外部查询中再次按用户分组,并且仅列出每周执行任务的用户,因为他们是唯一拥有COUNT(tasks) = 52
推荐阅读
- jquery - 将动态创建的输入值添加到数据库
- java - 转换 spring 端点输出
- java - IntelliJ 2020.2.4 中未导入 Maven 依赖项
- spring - Spring Boot:尝试从服务调用服务时连接超时
- python - 检查numpy数组中是否只出现一次最大值
- java - Spring Boot 层架构休息验证
- javascript - 我可以使用 Nodejs 制作网站跟踪器吗?
- mysql - MYSQL 存储过程 - 连续行值(续)
- python - 对 csv 文件返回的每对元组求和
- java - ResourceLocation 抛出 FileNotFoundException Minecraft Forge 1.12.2