2017-10-12 56 views
0

我正在尝试获取不删除或更新记录的表中的活动用户数,而是将它添加到表中并假定最后一项是最有效的。但是,对于历史数量,我需要每天的活动次数。如何选择给定日期的最后一个条目

具有下列数据:

-------------------------------------- 
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

请参阅https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a -very-simple-sql-query – Strawberry

+0

给我们一个出发点。告诉我们你试过的东西。 –

回答

0
SELECT date, COUNT(DISTINCT user_id) AS active FROM data GROUP BY date; 

这就是你想要达到的目标吗?听起来很简单,但也许我误解你的问题......

UPDATE

此外,我想你需要一个单独的表“日期”包含所有日期。就像这样:

--------------------- 
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 

然后,你需要进行左/右JOIN来,你与我的回答上方的SQL查询得到的结果。

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

我与我的电话接听,所以我没有检查我的查询的有效性。但你有我的想法

+0

你没有考虑到一个用户可能有超过1个条目的事实,所以你需要做一个max()或其他东西 – smorhaim

+0

它不会有。它按日期分组 –

+0

无论如何,我还没有检查它 –

相关问题