背景:产品作了一个周期7天活动,用户能够每一天解锁一个任务,完成后发放奖励;微信
需求:用户连续登录明细数据及连续登录天数;app
目的:用户参与活动的兴趣度;ui
活动海报图:
spa
分析思路:.net
明细数据:3d
-- 根据用户ID分组按日期排序,将日期和分组序号相减获得连续登录的开始日期,若是开始日期相同说明连续登录orm
- 日期减去分区排序的序号,若是新日期相等,则连续登录 blog
汇总结果排序
附上代码ci
with, tmp_da_user as (
select
to_date(ds,'yyyymmdd') as ds
,uid
,count(distinct ds) as 完整天数
from tmp_t_user_takse_detail
where status_name = '完成'
and uid in ('203111313364823804','1833903495100023')
group by
ds
,uid
)
, tmp_da_user_diff as (
select
ds
,uid
,完整天数
,dateadd(ds, -ROW_NUMBER() OVER(PARTITION BY uid ORDER BY ds asc ),'dd') AS diff_rn
-- 注意这里是减法;日期减去分区排序的序号,若是新日期相等,则连续登录
from tmp_da_user
)
select
uid
,min(ds) as start_ds -- 连续登录的开始时间
,max(ds) as end_ds -- 连续登录的结束时间
,count(1) as continuous_day -- 连续登录的天数
,datediff(diff_rn, lag(diff_rn, 1) over(partition by uid order by diff_rn),'dd') interval_day-- 间隔多少天没交易
from tmp_da_user_diff
group by
uid
,diff_rn
补充问题:
如何取用户连续登录超过3天的明细数据?
本文分享自微信公众号 - SQL数据分析(dianwu_dw)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。