经典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; 
相关推荐
豆豆8 分钟前
高校网站群集约化建设与运营解决方案
大数据·cms·信创·解决方案·网站管理系统·站群cms·高校站群
YSyuanshuo10 分钟前
2026滴鸡精品牌指南:羽本元如何用技术革新挑战传统老牌?
大数据·python
档案宝档案管理28 分钟前
2026档案管理系统排名解析,易用性+安全性双维度对比
大数据·数据库·人工智能·档案管理
AllData公司负责人37 分钟前
AllData数据中台集成开源项目Apache Doris建设实时数仓平台
java·大数据·数据库·数据仓库·apache doris·实时数仓平台·doris集群
乐迪信息1 小时前
乐迪信息:智慧港口AI防爆摄像机实现船舶流量精准统计
大数据·人工智能·物联网·安全·目标跟踪
格鸰爱童话1 小时前
跟着AI学sql
数据库·sql
isNotNullX1 小时前
数据仓库是什么?怎么搭建数据仓库?
大数据·分布式·spark
数厘2 小时前
2.13 sql数据更新(UPDATE)
数据库·sql·oracle
隐于花海,等待花开2 小时前
HIVE日期函数大全
数据仓库·hive·hadoop
财迅通Ai2 小时前
卫星化学一季度净利同比增34.97% 海外业务高增叠加价差走阔创盈利新高
大数据·人工智能·卫星化学