SQL 求最大连续登陆天数

这篇具有很好参考价值的文章主要介绍了SQL 求最大连续登陆天数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

已知登陆表中有 uid、login_time,求每个用户的最大连续登陆天数

1、模拟数据集 user_login

WITH user_login as (
    select 'A' uid,
        from_unixtime(
            unix_timestamp('2020-08-01 10:00:00', "yyyy-MM-dd HH:mm:ss")
        ) as login_time
    union all
    select 'A' uid,
        from_unixtime(
            unix_timestamp('2020-08-02 10:01:00', "yyyy-MM-dd HH:mm:ss")
        ) as login_time
    union all
    select 'A' uid,
        from_unixtime(
            unix_timestamp('2020-08-03 10:02:03', "yyyy-MM-dd HH:mm:ss")
        ) as login_time
    union all
    select 'A' uid,
        from_unixtime(
            unix_timestamp('2020-08-06 10:04:03', "yyyy-MM-dd HH:mm:ss")
        ) as login_time
    union all
    select 'A' uid,
        from_unixtime(
            unix_timestamp('2020-08-07 10:03:10', "yyyy-MM-dd HH:mm:ss")
        ) as login_time
    union all
    select 'B' uid,
        from_unixtime(
            unix_timestamp('2020-08-12 10:03:11', "yyyy-MM-dd HH:mm:ss")
        ) as login_time
    union all
    select 'B' uid,
        from_unixtime(
            unix_timestamp('2020-08-13 10:04:00', "yyyy-MM-dd HH:mm:ss")
        ) as login_time
    union all
    select 'B' uid,
        from_unixtime(
            unix_timestamp('2020-08-14 12:04:06', "yyyy-MM-dd HH:mm:ss")
        ) as login_time
    union all
    select 'A' uid,
        from_unixtime(
            unix_timestamp('2020-08-15 12:04:10', "yyyy-MM-dd HH:mm:ss")
        ) as login_time
    union all
    select 'B' uid,
        from_unixtime(
            unix_timestamp('2020-08-16 13:04:12', "yyyy-MM-dd HH:mm:ss")
        ) as login_time
    union all
    select 'B' uid,
        from_unixtime(
            unix_timestamp('2020-08-17 15:05:10', "yyyy-MM-dd HH:mm:ss")
        ) as login_time
)

2、将记录按照每个用户分区,对登录时间进行升序排列,得到数据集 user_log_rank 

代码:

user_log_rank as
(
select uid,
    login_time,
    row_number() over(
        partition by uid
        order by login_time
    ) as sort
from (
        select uid,
            date(login_time) as login_time
        from user_login
        group by uid,
            date(login_time)
    ) as rs_user_login
)

结果:

连续登录天数sql,sql,数据库,hive

 文章来源地址https://www.toymoban.com/news/detail-560318.html

3、每条记录的登录时间减去排序的数字,得到一个组 date_group,对用户及date_group 做聚合,continue_days 即为连续登录天数

代码:

select uid,
    date_sub(login_time, sort) as date_group,
    min(login_time) as start_dt,
    max(login_time) as end_dt,
    count(1) as continue_days 
from user_log_rank a
group by uid,
    date_sub(login_time, sort)

结果:

连续登录天数sql,sql,数据库,hive

 

4、以 uid 分组,max(continue_days )即为每个用户的最大连续登录天数

代码:

select uid,
    max(continue_days) as max_continue_days
from (
        select uid,
            date_sub(login_time, sort) as date_group,
            min(login_time) as start_dt,
            max(login_time) as end_dt,
            count(1) as continue_days
        from user_log_rank a
        group by uid,
            date_sub(login_time, sort)
    ) as rs_continue_days
group by uid

结果:

连续登录天数sql,sql,数据库,hive

 

到了这里,关于SQL 求最大连续登陆天数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SQL 最大连续合格次数 最大连胜记录次数 最大连败记录次数

    有这样一个问题,工厂中要统计某个供应商送货检验的情况,依照其连续合格次数,决定是否免检,不使用游标或者循环,如何写这个sql。 此情景也可以用于统计连胜记录等 先要学习一下 窗函数LAG,指的是按分组和排序,取到之前(before)行的值。 假如表是这样的: 建表语句

    2024年01月19日
    浏览(44)
  • 在sql server数据库设置最大并发连接数

    1.查询所有 SELECT * FROM sysprocesses   WHERE dbid in( select database_id from sys.databases where name=\\\'ECS_DEV\\\' )order by program_name; 2.查询连接数 SELECT program_name,COUNT(1) FROM sysprocesses   WHERE dbid in( select database_id from sys.databases where name=\\\'ECS_DEV\\\' )group by program_name; 3.查询服务器运行程序连接数 SELECT count

    2024年02月06日
    浏览(57)
  • 【数据库】日常使用PL/SQL 登录ORACLE 数据库查询数据

    一、PL/SQL 登录方式 username: ##访问数据库的账号 password: ##访问数据库的密码 Databse: ##数据库IP地址/实例名 数据库集群心跳地址/实例名 Connect as : ##Normal,如果使用sysdba账户登录选择SYSDBA 二、PL/SQL使用SQL语句查询 点击上方导航栏,New,选择SQL Window,即可再次输入要查询的

    2024年02月19日
    浏览(68)
  • SQL Server使用登录名连接数据库报错:18456

    错误: 18456 是因密码或用户名错误而使身份验证失败,如果用户名密码正确,则该登录名没有连接数据库引擎权限,登录权限也被无情剥夺了,开启服务器【SQL Server身份验证模式】即可 以windows验证模式进入数据库管理器 右键【服务器】选择【属性】 修改服务器身份验证【

    2024年02月11日
    浏览(51)
  • Microsoft ODBC SQL SERVER Driver 无法打开登录 ‘xxxx‘ 中请求的数据库。登录失败

     1、请打开企业管理器检查数据库是否质疑或损坏,若有损坏,先修复好数据库后再试试。 2、在企业管理器中检查数据库用户密码是否正确,若该账户丢失或密码被篡改,可备份好数据库后使用软件server安装包安装一个新库后,再删除新库还原之前的备份再试试。 3、请检查

    2024年02月11日
    浏览(74)
  • DB SQL 转 ES DSL(支持多种数据库常用查询、统计、平均值、最大值、最小值、求和语法)...

    1. 简介   日常开发中需要查询 Elasticsearch 中的数据时,一般会采用 RestHighLevelClient 高级客户端封装的API。项目中一般采用一种或多种关系型数据库(如: Mysql 、 PostgreSQL 、 Oracle 等) + NoSQL(如: Elasticsearch )存储方案;不同关系数据库可以采用 Mybatis-Plus 方案屏蔽数据库的方言

    2024年01月17日
    浏览(50)
  • C#窗体程序连接SQL Server数据库实现账号登录、账号注册、修改密码、账号注销和实名认证(不定时更新)

    这是本人用Visual Studio2019做的一个C#窗体登录程序,如标题所示,它包含了账号登录、注册账号、修改密码、注销账号和实名认证五个功能。对于有一定基础知识的小伙伴来说,应该不算太难,里面有注释说明,可能咋一看感觉代码运行的逻辑有点乱,不过没关系,相信对你会

    2024年02月02日
    浏览(71)
  • 大数据Flink(七十):SQL 动态表 & 连续查询

    文章目录 SQL 动态表 连续查询 一、​​​​​​​SQL 应用于流处理的思路

    2024年02月10日
    浏览(38)
  • Android studio 通过mysql连接数据库完成注册登录,登陆后通过tcp协议与电脑的网络调试助手互发信息

    先不多直接看软件截图 这个是首页等陆界面 xml代码如下 MainActivity文件    注册界面的xlm文件  这个界面比较简单就不介绍了   MainActivity文件 这是一个注册失败的界面,如果数据库内有相同的账号密码则显示注册失败 话不多说直接上代码 MainActivity里面的代码 这里是user类用

    2024年02月02日
    浏览(46)
  • sql查询当前值到最大值中间的数据

    方法一 很明显这样做是错的 会报错 invalid use of group function 原因是 max是聚合函数, where条件中不能使用聚合函数 为什么呢 这是一个很有意思的问题,仔细地想一下其实很有道理。我们知道,聚集函数也叫列函数,它们都是基于整列数据进行计算的,而where子句则是对数据行

    2024年02月14日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包