hive面试题——求连续活跃天数

hive面试题——求连续活跃天数,第1张

hive面试题——求连续活跃天数

问题:求一个月用户连续活跃3天以上的用户

数据格式如下:

cust_noActive date1202112011202112021202112031202112041202112052202112012202112093202112053202112063202112074202112010

解题思路一:使用row_number() over()

with t1 as(
    select
        cust_no,
        actve_date,
        row_number()over(partition by cust_no order by active_date) as rn
    from tmp
)
select
    cust_no,
    active_date+rn,  #如果联系刚好等于同一天
    count(*) as cnt
from t1
group by cust_no,
    active_date+rn
having cnt>=3

解题思路二:使用lag()over()或者lead()over()

with t1 as(
    select
        cust_no,
        actve_date as actve_date,
        LAG(actve_date,3) OVER(PARTITION BY cust_no ORDER BY actve_date) AS actve_date_3 
    from tmp
)
select
    cust_no,
from t1
where actve_date-actve_date_3=3
group by cust_no

解题思路三:这类的需求,一般情况不是只需计算一次,可能一个月要好几次数据。所以一般使用第一个任务每天计算累计活跃天数(如果当天活跃前一天活跃天数+1,如果当天不活跃0),第二个任务计算最大获取天数。需要当月活跃天数大于3天,直接从第二个任务取当月最大活跃天数大于3天的客户。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5696162.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存