我需要根据开始日期和结束日期查找活跃用户的每日总数。
注册表
id registration_no start_date end_date
1 1000 2014/12/01 2014/12/03
2 1001 2014/12/01 2014/12/03
3 1002 2014/12/02 2014/12/04
4 1003 2014/12/02 2014/12/04
5 1004 2014/12/02 2014/12/04
6 1005 2014/12/03 2014/12/05
7 1006 2014/12/05 2014/12/06
8 1007 2014/12/05 2014/12/09
9 1008 2014/12/06 2014/12/10
10 1009 2014/12/07 2014/12/11
结果应采用以下格式。
Date Active Users
2014-12-01 2
2014-12-02 5
2014-12-03 6
2014-12-04 4
2014-12-05 3
2014-12-06 3
2014-12-07 3
2014-12-08 3
2014-12-09 3
2014-12-10 2
2014-12-11 1
2014-12-12 0
我知道以下查询不起作用。
SELECT start_date, count(*) FROM registration
WHERE start_date >= '2014/12/01' AND end_date <='2014/12/12'
GROUP BY start_date
这不是想要的输出:
2014-12-01 2
2014-12-02 3
2014-12-03 1
2014-12-05 2
2014-12-06 1
2014-12-07 1
如有任何帮助,我们将不胜感激。
最佳答案
您需要创建一个包含所有所需日期的“日历”,然后使用如下查询:
SELECT calDay as `Date`, count(id) as `Active Users`
FROM (SELECT cast('2014-12-01' + interval `day` day as date) calDay
FROM days31
WHERE cast('2014-12-01' + interval `day` day as date) < '2014-12-12') calendar
LEFT JOIN registration on (calDay between start_date and end_date)
GROUP BY calDay
ORDER BY calDay;
你可以看到它在这个 fiddle 中工作,其中 days31
只是一个包含 0-30 整数的 View 。这允许查询在最多 31 天的任何日历中工作。您可以向 View 添加更多天数或使用交叉连接动态生成它们。参见 http://www.artfulsoftware.com/infotree/qrytip.php?id=95
关于mysql - 给定日期范围内的每日活跃用户数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27761170/