用个排序的窗口函数即可实现:
select distinct user_id
from (
select user_id
, continue_date
, count(login_date) as continue_day_cnt
from (
select user_id
, login_date
, login_date - row_number() over(partition by user_id order by login_date) as continue_date
from (
select user_id
, substr(login_time, 1, 10) as login_date
from dw.dw_user_login_log
where 1 = 1
group by user_id
, substr(login_time, 1, 10)
) t
) m
where 1 = 1
group by user_id
, continue_date
having count(login_date) >= 3 -- 连续3天登录,根据业务场景调整这一数值
) x ;
本文介绍了一种使用SQL窗口函数来统计用户连续登录天数的方法。通过嵌套子查询,首先将用户的登录时间转化为日期格式,然后计算连续登录的日期,最后筛选出连续登录天数大于等于设定值的用户。
3574

被折叠的 条评论
为什么被折叠?



