2016-08-15 26 views
1

我有一個名爲「alerts」的表,看起來像這樣。計算在MySQL中點擊不同事件的用戶數

user_id event alert_type  eventtime 
1  clk  s   January, 19 2037 12:16:21 
2  clk  b   January, 19 2037 00:28:25 
3  clk  b   January, 19 2037 02:44:23 
3  clk  b   January, 19 2037 00:16:25 
1  clk  b   January, 19 2037 02:28:25 
9  clk  s   January, 19 2037 22:40:25 
9  clk  s   January, 19 2037 03:14:07 
2  clk  b   January, 19 2037 03:22:07 
6  clk  b   January, 19 2037 05:21:07 
9  clk  p   January, 19 2037 15:24:07 
3  clk  p   January, 19 2037 05:34:07 
10  clk  s   January, 19 2037 12:39:07 
4  clk  b   January, 19 2037 09:14:07 
4  clk  s   January, 19 2037 09:34:07 
1  clk  s   January, 19 2037 09:54:07 
8  clk  b   January, 19 2037 13:14:07 
8  clk  p   January, 19 2037 10:24:07 
8  clk  p   January, 19 2037 13:45:07 
10  clk  b   January, 19 2037 13:51:07 
4  clk  b   January, 19 2037 14:14:07 
12  clk  p   January, 19 2037 15:14:07 
1  clk  s   January, 19 2037 00:44:07 
10  clk  s   January, 19 2037 08:14:07 
12  clk  s   January, 19 2037 16:24:07 
7  clk  p   January, 19 2037 06:53:07 
6  clk  b   January, 19 2037 20:14:07 
7  clk  b   January, 19 2037 20:23:07 

給定一個ALERT_TYPE,我試圖計算有多少用戶點擊了警報就在某一天他們第一個警報

我期望的輸出是

alert_type Count of Users 
b    4 
p    3 
s    3 

我試圖做這種方式,但我沒有得到我想要

SELECT count(user_id) AS Count of Users, alert_type, MIN(eventtime) 
FROM alerts 
GROUP BY alert_type 
ORDER BY alert_type DESC; 

請提供一些投入,以實現所需的輸出是什麼。

回答

2

這裏有一個方法來獲取每個用戶的第一警報一天:

select alert_type, count(*) as `Total Number of Users` 
from alerts a 
where a.eventtime = (select min(a2.eventtime) 
        from alerts a2 
        where a2.user_id = a.user_id and 
          date(a2.eventtime) = date(a.eventtime) 
        ) 
group by alert_type; 
+0

謝謝你這麼多。它工作完美:-) – Sharath