活动用户SQL查询

时间:2010-11-30 20:23:00

标签: sql mysql

我正在尝试在网络应用中绘制活跃用户。我的数据库由两个主要表格usertask组成。 task有一个user_id

我对活跃用户的定义在给定结束日期的两周内创建了2个以上任务的用户

所以,我需要一个SQL查询,它给出了给定开始日期和结束日期之间活动用户的数量。我能够通过将查询放在循环中,每次都拉动结果来做到这一点,但我希望能够在单个查询中完成。

返回的数据应该是:

Date         Count
2010-01-01   4
2010-01-02   3
2010-01-03   5

编辑以澄清所需的数据集。

3 个答案:

答案 0 :(得分:2)

SELECT t.taskdate, COUNT(DISTINCT u.user_id)
    FROM user u
        INNER JOIN task t
            ON u.user_id = t.user_id
                AND t.taskdate BETWEEN DATE_ADD(@EndDate, INTERVAL -2 WEEK) AND @EndDate
    GROUP BY t.taskdate
    ORDER BY t.taskdate

答案 1 :(得分:1)

带有HAVING子句的GROUP BY应足以让所有用户

SELECT u.user_id
FROM   user u
       INNER JOIN task t ON t.user_id = u.user_id
WHERE  date BETWEEN DATEADD(week, -2, <EndDate>) AND <EndDate>

GROUP BY
       u.user_id
HAVING COUNT(*) > 1

并获得总计数将其包装在另一个声明中

SELECT COUNT(*)
FROM   (
         SELECT u.user_id
         FROM   user u
                INNER JOIN task t ON t.user_id = u.user_id
         WHERE  date BETWEEN DATEADD(week, -2, <EndDate>) AND <EndDate>
         GROUP BY
                u.user_id
         HAVING COUNT(*) > 1
       ) u

修改

使用Joe发布的代码修正了2周的要求。

答案 2 :(得分:0)

这不适用于mysql但它可以工作(我不确定task_date + 14)。

select *
from user u
where (select count(*) form task t where t.user_id = u.user_id and t.task_date + 14 > @end_date) > 2

内部查询select count...获取在给定的end_date之前14天或更短时间内创建的用户的任务

相关问题