经典sql

一、连续登录问题

问题:1)、每个用户连续登录最大天数

2)、连续登录大于三天的用户数

分析:本质都是计算用户连续登录天数

方案一:利用排序窗口

sql 复制代码
select a.user_id
      ,a.date_rslt
      ,count(1) as cnt
from (
        select    
            t.user_id
            ,t.login_time
            ,date_sub(login_time, num) as date_rslt
         from (
                select 
                    user_id
                    ,login_time
                    ,row_number() over(partition by user_id order by login_time) as num
                from login_log
         ) t
      ) a
group by a.user_id,a.date_rslt

方案二、增量加全量

连续访问天数v_days(最新flag值为1,则v_days累加,否则为0)

历史最大访问天数max_days (从max_days、v_days中取最大值)

sql 复制代码
select 
    coaleasce(h.user_id,i.user_id) as user_id,
    if(i.user_id is not null,v_days+1,0) as v_days,
    greatest(max_days,if(i.user_id is not null,v_days+1,0)) as max_days
from
history_ds h
full join 
log_time i

扩展1:连续登录,中间间隔1天也算

sql 复制代码
select user_id
       ,group_id
       ,(datediff(max(login_date),min(login_date))+1) as continuous_login_days
  from (
      select 
            user_id
            ,login_date
            ,sum(if(date_diff>1,1,0)) over(partition by user_id order by login_date rows between unboundedpreceding and current row) as group_id
      from (
        select 
            user_id
            ,login_date
            ,datediff(login_date,last_login_date) as date_diff
        from (
            select 
                user_id
                ,login_date
                ,lag(login_date,1,'1970-01-01') over(partition by user_id order by login_date) as last_login_date
            from test_login
        )t1
    )t2
)t3
group by user_id
       ,group_id;

扩展2:断点排序

连续日期的数据对应的值发生变化,重新排序

sql 复制代码
select  
  a,
  b,
  row_number() over( partition by b,a_diff order by a) as c
from 
(
  select  
    a,
    b,
    a-num as a_diff
  from 
  (
   select 
     a,
     b,
     row_number() over( partition by b order by  a ) as num
   from t1 
  )tmp1
)tmp2
order by a; 
相关推荐
Elastic 中国社区官方博客1 分钟前
Elasticsearch:使用 ES|QL 与 dense_vector 字段
大数据·数据库·人工智能·sql·elasticsearch·搜索引擎·全文检索
雷电法拉珑9 分钟前
Alpha158因子前世今生
大数据
躺柒16 分钟前
读人机沟通法则:理解数字世界的设计与形成04机器是不完整的
大数据·人工智能·ai·人机交互·人机对话
凯子坚持 c20 分钟前
昇腾NPU适配Apex避坑指南:从编译失败到顺利安装
大数据·elasticsearch·搜索引擎
bad-Lz25 分钟前
git代码库管理
大数据·git·elasticsearch
天远Date Lab33 分钟前
构建金融级风控中台:Java Spring Boot 集成天远借贷风险探查 API 实战
java·大数据·spring boot·金融
ApiHug1 小时前
智能采购新革命:真惠采——让工业品采购降本增效双突破
大数据·人工智能
老马聊技术1 小时前
Spark完全分布式集群环境搭建详细教程
大数据·spark
谢尔登1 小时前
reset和revert最佳实践
大数据·elasticsearch·搜索引擎