背景:產品作了一個週期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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。