我试图在不删除或更新记录的表中获取活动用户的计数,而是添加到表中并假设最后一个条目是最有效的。但是,对于历史记录,我需要计算每天的活动数量。
拥有以下数据:
--------------------------------------
id | user_id | type | date
--------------------------------------
1 sam New 2017-10-10
2 john New 2017-10-12
3 sam Change 2017-10-14
4 sam Cancel 2017-10-15
我需要能算一下,到目前为止我有多少“活跃”用户。我期待得到的是如下:
---------------------
Date | Active
---------------------
...
2017-10-08 0 <-- Prior there were none
2017-10-09 0
2017-10-10 1
2017-10-11 1 <-- Fill-in dates
2017-10-12 2 <-- Cumulative adding
2017-10-13 2
2017-10-14 2 <-- A change is irrelevant
2017-10-15 1 <-- A Cancel should decrease the count
我确实有一个calendar_table并尝试了各种建议,但似乎无法做到正确。
答案 0 :(得分:0)
SELECT date, COUNT(DISTINCT user_id) AS active FROM data GROUP BY date;
这是你想要达到的目标吗?听起来很简单,但也许我误解了你的问题......
<强>更新强>
另外我想你需要一个单独的表&#34;日期&#34;包含所有日期。像这样:
---------------------
Date
---------------------
...
2017-10-08
2017-10-09
2017-10-10
2017-10-11
2017-10-12
2017-10-13
2017-10-14
2017-10-15
然后你需要对我在答案顶部的SQL查询得到的结果执行LEFT / RIGHT JOIN。
SELECT dates.date, COALESCE(result.active, 0)
FROM dates
LEFT JOIN (
SELECT date, COUNT(DISTINCT user_id) AS active
FROM data
GROUP BY date
) AS result ON dates.date = result.date
结果可能如下所示:
---------------------
Date | Active
---------------------
...
2017-10-08 0
2017-10-09 0
2017-10-10 1
2017-10-11 1
2017-10-12 2
2017-10-13 2
2017-10-14 2
2017-10-15 1
COALESCE
用null
替换0
我正在接听我的电话,所以我没有检查查询的有效性。但是你有了我的想法