一、题目
二、题目要求&示例
查询每位玩家 第一次登录平台的日期
三、实现方法
1、使用开窗函数row_number()
用法:row_number() over(partition by 某字段 order by 某字段)
partition by 是以某个字段分组
order by是根据某字段排序
像示例数据按[partition by player_id order by envent_date]后,效果如下
我们要取的就是按id分组后每组里面的第一条数据
查询sql:
select
t.player_id,
t.event_date as first_login
from (
select
t.player_id,
t.event_date,
row_number() over(partition by t.player_id order by t.event_date) as rn
from
Activity t) t
where t.rn = 1
2、使用group by函数+min()函数
通过player_id字段分组后的数据如下
从每组里面取出日期的最小值就是用户最早登录日期了
查询sql:
select
player_id,
min(t.event_date) as first_login
from Activity t
group by t.player_id;
3、使用开窗函数first_value()
用法,first_value() over(partition by 某些字段 order by 某些字段):求一组数据的排在第一位的值
我们来看first_value()按用户id分组,登录日期升序排列后的数据:每一行都有对应分组的排第一的数据,所以查询首次登录日期的时候要去重
first_value(event_date) over(partition by player_id order by event_date):
查询sql:
select
distinct
t.player_id,
first_value(event_date) over(partition by player_id order by t.event_date) as first_login
from Activity t