SQL查询用户的最长连续登陆天数

题目重点:连续

设表名字:user_login

SQL查询用户的最长连续登陆天数_第1张图片

 

第一步:使用ROW_NUMBER() 窗口函数 按UID分组,按date1降序排

-- 第一段首先根据用户分组,登陆时间排序,结果按照登陆时间升序排列
    SELECT 
    UID,
    date1,
    row_number() OVER(PARTITION BY UID order by date1) as sort
    FROM user_login

结果:

SQL查询用户的最长连续登陆天数_第2张图片

第二步:判断是否连续:

(升序排序后  : 用date1-sort  如果连续则做差后值一样,然后再用UID,login_group分组算出每个UID下连续的天数)

SELECT 
UID,
date_sub(date1,sort) as login_group,
min(date1) as start_date1,
max(date1) as end_date1,
count(1) as continuous_days
FROM (
    -- 第一段首先根据用户分组,登陆时间排序,结果按照登陆时间升序排列
    SELECT 
    UID,
    date1,
    row_number() OVER(PARTITION BY UID order by date1) as sort
    FROM user_login
) a
GROUP BY UID,date_sub(date1,sort)

SQL查询用户的最长连续登陆天数_第3张图片

第三步:再以UID分组,去取max(continuous_days)

SELECT 
UID,
max(continuous_days) as maxday

FROM 
(

SELECT 
UID,
date_sub(date1,sort) as login_group,
min(date1) as start_date1,
max(date1) as end_date1,
count(1) as continuous_days
FROM (
    -- 第一段首先根据用户分组,登陆时间排序,结果按照登陆时间升序排列
    SELECT 
    UID,
    date1,
    row_number() OVER(PARTITION BY UID order by date1) as sort
    FROM user_login
) a
GROUP BY UID,date_sub(date1,sort)


)b

GROUP BY UID

SQL查询用户的最长连续登陆天数_第4张图片

你可能感兴趣的:(数据库,mysql,HIVE)