7天周期活动,按日统计连续完成N天任务

景:产品作了一个周期7天活动,用户能够每一天解锁一个任务,完成后发放奖励;微信

需求:按日统计连续完成N天用户数
app

目的:用户参与活动的兴趣度;函数


活动海报图:
ui


分析思路:spa

这就是连续登录问题,用至关时间差断定;.net

用户明细以下:3d


借用lag函数断定上一次登录日期;orm



连续登录几天,其datediff日期差等于连续登录天数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_tack as (

select *

,lag(ds,1)over(partition by uid order by ds asc) as lag_1

,lag(ds,2)over(partition by uid order by ds asc) as lag_2

,lag(ds,3)over(partition by uid order by ds asc) as lag_3

,lag(ds,4)over(partition by uid order by ds asc) as lag_4

,lag(ds,5)over(partition by uid order by ds asc) as lag_5

,lag(ds,6)over(partition by uid order by ds asc) as lag_6

,lag(ds,7)over(partition by uid order by ds asc) as lag_7

from tmp_da_user

)


select

ds

,count(distinct uid) as 当天完成任务数

,count(case when DATEDIFF(ds,lag_1,'dd') = 1 then uid end ) as 连续2天完成

,count(case when DATEDIFF(ds,lag_2,'dd') = 2 then uid end ) as 连续3天完成

,count(case when DATEDIFF(ds,lag_3,'dd') = 3 then uid end ) as 连续4天完成

,count(case when DATEDIFF(ds,lag_4,'dd') = 4 then uid end ) as 连续5天完成

,count(case when DATEDIFF(ds,lag_5,'dd') = 5 then uid end ) as 连续6天完成

,count(case when DATEDIFF(ds,lag_6,'dd') = 6 then uid end ) as 连续7天完成

,count(case when DATEDIFF(ds,lag_7,'dd') = 7 then uid end ) as 连续8天完成

from tmp_da_user_tack

group by ds





本文分享自微信公众号 - SQL数据分析(dianwu_dw)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索