day7_多种方法实现[游戏玩法分析I]

一、题目

二、题目要求&示例

查询每位玩家 第一次登录平台的日期

三、实现方法

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值