前言
练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。
今日题目:
512.游戏玩法分析II
表:Activity
列名 | 类型 |
---|---|
player_id | int |
device_id | int |
event_date | date |
games_played | int |
(player_id, event_date) 是这个表的两个主键(具有唯一值的列的组合)这个表显示的是某些游戏玩家的游戏活动情况每一行是在某天使用某个设备登出之前登录并玩多个游戏(可能为0)的玩家的记录
请编写解决方案,描述每一个玩家首次登陆的设备名称
我那不值一提的想法:
- 首先梳理表内容,题干一共给了一张活动表,记录了玩家id,设备id,登录日期,玩游戏的数量
- 其次分析需求,需要找到每一个玩家首次登录的设备名称
- 既然是首次登录,那么就需要分组找到每个玩家对应日期的最小值
with min_date as (
select player_id,min(event_date) as mindate
from Activity
group by player_id
)
- 在找到最小值后,将这个临时表连接原表,筛选条件是player_id,event_date都要相等
select m.player_id,a.device_id
from min_date m
left join Activity a
on m.player_id = a.player_id and m.mindate = a.event_date
- 完整代码
with min_date as (
select player_id,min(event_date) as mindate
from Activity
group by player_id
)
select m.player_id,a.device_id
from min_date m
left join Activity a
on m.player_id = a.player_id and m.mindate = a.event_date
结果:
总结:
能运行就行。
标签:力扣,min,event,II,player,Activity,date,512,id From: https://blog.csdn.net/dkmaa/article/details/136872903