游戏玩法分析II
题目
表:活动表:
列名 | 类型 |
---|---|
player_id | int |
device_id | int |
event_date | date |
games_played | int |
player_id,event_id是这张表的主键。
这个表格显示了一些游戏中玩家的活动。
每一行都是一个玩家的记录,该玩家在某一天使用某些设备注销之前登录并玩了一些游戏(可能是0)。
写一个查询每位玩家第一次登陆设备的sql。
查询结果的格式如下所示:
Activity table:
player_id | device_id | event_date | games_played |
---|---|---|---|
1 | 2 | 2016-03-01 | 5 |
1 | 2 | 2016-5-02 | 6 |
2 | 3 | 2017-06-25 | 1 |
3 | 1 | 2016-03-02 | 0 |
3 | 4 | 2018-07-03 | 5 |
结果表:
player_id | first_login |
---|---|
1 | 2016-03-01 |
2 | 2017-06-25 |
3 | 2016-03-02 |
思路
同上一个题目有点类似,这次要求其实是在上一个题目的基础上进一步查找。一样的思路,先找出第一次登陆的时间,然后使用这一次的查询作为临时表再次查询原表,找到playerid和event_date对应的时间即可.
代码
SELECT
a.player_id, a.device_id
FROM
Activity a
RIGHT JOIN (
SELECT
player_id,
min(event_date) AS first_date
FROM
Activity
GROUP BY player_id
) b
ON
a.event_date = b.first_date
WHERE
a.player_id = b.player_id;