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,辅助日期列

    以上

  • 相关阅读:
    李超线段树板子
    蒟蒻的平衡树学习笔记(=.=
    P2254 [NOI2005] 瑰丽华尔兹
    表达式求值学习笔记
    二分和一些其它算法的奇妙组合
    《wwx》的学习总结(题解)
    set的学习笔记
    题解 P4913 【深基16.例3】二叉树深度
    AGC002F Leftmost Ball
    CSP&&NOIP2020 游记
  • 原文地址:https://www.cnblogs.com/com-xiaolanchong/p/14760987.html
Copyright © 2011-2022 走看看