大数据经典面试题之 -- HQL编写 连续登陆天数

一、数据如下

大数据经典面试题之 -- HQL编写 连续登陆天数_第1张图片

二、答案如下

select
a.id,
a.name,
a.montha,
count(a.newline)
from(
select
a.id,
a.name,
a.montha,
a.daya-a.rn as newline -- 3、子查询中rn是排名递增1 每签到一天也是递增1 所以直接用签到数减排行
from(
    select
    a.id,
    a.name,
    a.montha,
    a.daya,
    row_number() over(partition by a.id,a.montha order by a.daya) rn -- 2、id_month作为维度 为了每个人每个月登陆几次
    from(
        select
        a.id,
        a.name,
        a.montha,
        collect_list(a.daya)[0] as daya
        from( --1、 先做好子表
            select
            id,
            name,
            day(from_unixtime(unix_timestamp(date,'M/d/yyyy'))) daya,
            month(from_unixtime(unix_timestamp(date,'M/d/yyyy'))) as montha
            from login_zz
        )as a
        group by a.id,a.name,a.montha,a.daya
    )as a
)as a
)a
group by
a.id,
a.name,
a.montha

三、思路:

按照月分组,对天去重,然后rownumber()对id和月分组,对day排序,每个字段用天减去序号,结果相同的就是连续登陆的

大数据经典面试题之 -- HQL编写 连续登陆天数_第2张图片

你可能感兴趣的:(第5维度,面试题解决)