问题:求一个月用户连续活跃3天以上的用户
数据格式如下:
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天的客户。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)