题目描述:
Table: Activity
+--------------+---------+
| Column Name | Type |
+--------------+---------+
| player_id | int |
| device_id | int |
| event_date | date |
| games_played | int |
+--------------+---------+
(player_id, event_date) 是这个表的两个主键
这个表显示的是某些游戏玩家的游戏活动情况
每一行是在某天使用某个设备登出之前登录并玩多个游戏(可能为0)的玩家的记录
请编写一个 SQL 查询,描述每一个玩家首次登陆的设备名称
查询结果格式在以下示例中:
Activity table:
+-----------+-----------+------------+--------------+
| player_id | device_id | event_date | games_played |
+-----------+-----------+------------+--------------+
| 1 | 2 | 2016-03-01 | 5 |
| 1 | 2 | 2016-05-02 | 6 |
| 2 | 3 | 2017-06-25 | 1 |
| 3 | 1 | 2016-03-02 | 0 |
| 3 | 4 | 2018-07-03 | 5 |
+-----------+-----------+------------+--------------+
Result table:
+-----------+-----------+
| player_id | device_id |
+-----------+-----------+
| 1 | 2 |
| 2 | 3 |
| 3 | 1 |
+-----------+-----------+
解题思路:
这道题是:描述每一个玩家首次登陆的设备名称
“游戏玩法分析 | ” 是 :第一次登陆平台的日期。
结合起来呢就是:描述每一个玩家首次登陆的设备名称,日期最小的那次登陆,
然后呢我们就可以通过,子查询的方式,将查询结果作为条件。
而这个子查询得条件就是,第一次登陆平台的日期。
所以就简单了
select a.player_id,a.device_id
from Activity a
where (a.player_id,a.event_date) in(
select b.player_id,min(b.event_date) as first_login
from Activity b
group by b.player_id
)