开窗函数row_number()over(partition order by)中partition应该放什么?
开窗函数row_number()over(partition order by)中partition应该放什么?
我们现在一个dt每天的分区表,简单化来设计,有原始数据如下,一共14条数据:
题目一:现在求每个用户,每天,每个APP, 使用时长最长的那次。
我们能发现一天中一个用户一个APP会打开关闭打开关闭好几次,所以业务主键每天每个用户每个APP对应多条数据,close_time-open_time就得到停留时间,因此现在是对一天一个用户一个APP取最大值。我们第一反应就是分组 max ,看看能否实现:
select uuid ,appid, round(max((close_time-open_time)2460),0),substr(close_time,1,10)
from oppo_entreview
group by substr(close_time,1,10),uuid ,appid
order by 1,2,3;
得到11行数据,的确是我们需求的。
那用row_number()over() 怎么做?
select * from (
select dt, uuid ,appid, stay_time, row_number()over(partition by dt, uuid,appid order by stay_time desc) rn
from oppo_entreview_cum
) t
where rn=1
order by dt,uuid,appid, stay_time
这是在一线城市,月薪2万以下,基本每个公司都会问的必考题,关键在于电话面试的时候你头脑是否清晰的理解题目。