开发者社区> 问答> 正文

用户访问日志表 visit_log ,每一行数据表示一条用户访问日志。如何基于连续活跃天数实现? -

用户访问日志表 visit_log ,每一行数据表示一条用户访问日志。如何基于连续活跃天数实现?

SQL - 17
with visit_log as (
select stack (
6,
'2024-01-01', '101', '湖北', '武汉', 'Android',
'2024-01-01', '102', '湖南', '长沙', 'IOS',
'2024-01-01', '103', '四川', '成都', 'Windows',
'2024-01-02', '101', '湖北', '孝感', 'Mac',
'2024-01-02', '102', '湖南', '邵阳', 'Android',
'2024-01-03', '101', '湖北', '武汉', 'IOS'
) 
-- 字段:日期,用户,省份,城市,设备类型
as (dt, user_id, province, city, device_type)
)
select * from visit_log;

展开
收起
cuicuicuic 2024-05-07 19:15:52 17 0
1 条回答
写回答
取消 提交回答
  • 可以视作 基于相邻日期差实现(排序版) 的衍生版本,该实现能获取到更多信息,如连续活跃天数。

    -- SQL - 20
    select user_id
    from (
    select 
    *,
    -- 连续活跃天数
    count(distinct dt) 
    over (partition by user_id, cont) as cont_days
    from (
    select 
    *, 
    date_add(dt, 1 - dense_rank() 
    over (partition by user_id order by dt)) as cont
    from visit_log
    ) t1
    ) t2
    where cont_days >= 2
    group by user_id;
    

    image.png

    2024-05-07 20:35:02
    赞同 1 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PostgresChina2018_赖思超_PostgreSQL10_hash索引的WAL日志修改版final 立即下载
Kubernetes下日志实时采集、存储与计算实践 立即下载
日志数据采集与分析对接 立即下载