如何选择给定日期的最后一个条目

时间:2017-10-12 04:06:49

标签: mysql sql

我试图在不删除或更新记录的表中获取活动用户的计数,而是添加到表中并假设最后一个条目是最有效的。但是,对于历史记录,我需要计算每天的活动数量。

拥有以下数据:

--------------------------------------
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并尝试了各种建议,但似乎无法做到正确。

1 个答案:

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

COALESCEnull替换0

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

相关问题