zoukankan      html  css  js  c++  java
  • 【SQL】查询连续登陆天数

    数据库工程师或者ETL工程师可能会遇到的问题:

    查询连续登陆的天数,起始登陆日期,结束登陆日期,连续登陆天数

    表结构和数据(有重复数据)如下: 

    原理:使用Rank 排序,得到序号,登陆日期和需要相减,得到起始日期作为附注日期,再根据用户id和辅助日期进行分组即可。 

    废话不多说直接上代码:

    MySQL(不支持rank函数,通过白能量的形式实现): 

    select user_id,
    min(login_time) 起始登录日期,
    max(login_time) 结束登录日期,
    count(login_time) 连续登录天数
    from (select *, DATE_SUB(login_time,INTERVAL rank DAY) 辅助日期列
    from (select *,@rank := @rank + 1 AS rank
    from (select distinct user_id,DATE(login_time) as login_time
    from user_login_log) as a, (SELECT @rank := 0) as tmp order by user_id,login_time) as a) as c
    
    group by user_id,辅助日期列
    -- having count(login_time) > 3

    MySQL 参考自 :https://blog.csdn.net/github_38426094/article/details/80492093

    SQL Server :

    select id,
    min(date_time) 起始登录日期,
    max(date_time) 结束登录日期,
    count(date_time) 连续登录天数
    from (select *, DATEADD(day, -od, date_time) 辅助日期列
    from (select *,rank() over(partition by id order by date_time) as od
    from (select distinct id,date_time
    from testdate) as a) as b) as c
    
    group by id,辅助日期列

    以上

  • 相关阅读:
    poj 2676 Suduku (dfs)
    poj 1562 Oil Deposits (dfs)
    poj 2907 Collecting Beepers (dfs)
    poj 1655 Balancing Act (树形dfs)
    poj 3411 Paid Roads (dfs)
    hdu 2896 病毒侵袭 (AC)
    hdu 3065 病毒侵袭持续中 (AC)
    poj 2251 Dungeon Master (bfs)
    java中debug使用
    Swing入门级小项目总结
  • 原文地址:https://www.cnblogs.com/com-xiaolanchong/p/14760987.html
Copyright © 2011-2022 走看看