首页 > 解决方案 > 从表中查找过去一年中每周至少完成一项活动的所有用户

问题描述

我有两个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   

标签: mysqlsql

解决方案


我认为这样的事情应该有效......如果没有完整的样本数据,很难确定:

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


推荐阅读