题目:
Traffic 表:
该表没有主键,它可能有重复的行。
activity 列是 ENUM 类型,可能取 (‘login’, ‘logout’, ‘jobs’, ‘groups’, ‘homepage’) 几个值之一。
问题
编写一个 SQL 查询,以查询从今天起最多 90 天内,每个日期该日期首次登录的用户数。假设今天是 2019-06-30.
示例
Traffic 表:
Result 表:
请注意,我们只关心用户数非零的日期.
ID 为 5 的用户第一次登陆于 2019-03-01,因此他不算在 2019-06-21 的的统计内。
建表语句:
1 Create table If Not Exists traffic_1107 (user_id int(3), activity enum('login','logout','jobs','groups','homepage'), activity_date date); 2 Truncate table traffic_1107; 3 insert into traffic_1107 (user_id, activity, activity_date) values (1, 'login', '2019-05-01'), 4 ('1', 'homepage', '2019-05-01'),('1', 'logout', '2019-05-01'),('2', 'login', '2019-06-21'),('2', 'logout', '2019-06-21'),('3', 'login', '2019-01-01'),('3', 'jobs', '2019-01-01'), ('3', 'logout', '2019-01-01'),('4', 'login', '2019-06-21'),('4', 'groups', '2019-06-21'),('4', 'logout', '2019-06-21'),('5', 'login', '2019-03-01'),('5', 'logout', '2019-03-01'),('5', 'login', '2019-06-21'),('5', 'logout', '2019-06-21');
解题思路:
1.先以user_id分组找出所有用户第一次登陆的时间;
2.在第一步结果中筛选出距今90天内的数据;
3.最后使用聚合count()计数;
1 select login_date, count(user_id) as user_count 2 from ( 3 select user_id,min(activity_date) as login_date 4 from traffic_1107 5 where activity = 'login' 6 group by user_id 7 )as temp 8 where datediff('2019-06-30', login_date) <= 90 9 group by login_date;
标签:01,06,21,力扣,1107,2019,MySQL,logout,login From: https://www.cnblogs.com/liu-myu/p/17305939.html