首页 > 数据库 >sql获取连续登录不少于7天的用户

sql获取连续登录不少于7天的用户

时间:2023-07-15 17:25:12浏览次数:28  
标签:登录 userId userid loginDate 获取 logindate sql day select

测试数据:

 

 解题思路:

1.用窗口函数根据userId分组,将每个分组内的数据根据排序顺序编号

select
    userid,
    loginDate ,
    ROW_NUMBER() OVER (PARTITION BY userId ORDER BY loginDate) AS seq
	from test;

 

 

2. 用每条记录的loginDate 减去seq,得到一个时间 ,如果两条记录得到的这个时间相等表示是连续登录

select
    userid,
    loginDate ,
    ROW_NUMBER() OVER (PARTITION BY userId ORDER BY loginDate) AS seq,
    date_sub(logindate,interval row_number() over (partition by userid order by logindate) day) as day
	from test;

 

 

3.根据题目要求统计连续登录大于等于7天的用户,就是统计同一个userid是否至少存在7条记录的day是相等的

with gr as 
(select
	userid,
	date_sub(logindate,interval row_number() over (partition by userid order by logindate) day) as day
	from test)
select
    userid,
    day,
    count(1)
from gr group by userId ,day HAVING (count(1)>=7);

 

 

 上面的写法等同于

select
    userid,
    day,
    count(1)
from 
(select
	userid,
	date_sub(logindate,interval row_number() over (partition by userid order by logindate) day) as day
	from test) t
group by userId ,day HAVING (count(1)>=7);

 

标签:登录,userId,userid,loginDate,获取,logindate,sql,day,select
From: https://www.cnblogs.com/sen-2017/p/17556526.html

相关文章

  • 周六 mysql dql
        ......
  • mysqld.log日志文件输出的时间不对
    在本机新安装MySQL8后,查看mysql.log日志发现输出的日志有点不对劲,如下图所以:差不多相差了8个小时,但是我们查看数据库的时间的时候又是正常的,如下图所示:通过翻看MySQL官方文档后发现,新增了一个参数log_timestamps来设置错误日志输出的时区,如下图所示这个变量默认值是UTC,我们......
  • sql注入基础
    sql注入           意义是:用户在提交表单时输入恶意的sql语句,欺骗后端把其当作正常的数据执行 注入方式分类有两种         按照注入方式分:union注入、布尔盲注、时间注入、报错注入         按照注入点类型分:字符型、数字型  一、按......
  • MySQL学习-基本操作
    1.数据库操作创建数据库createdatabasetest;查看数据库showdatabases;进入数据库usetest;删除数据库dropdatabasetest;2.表格操作创建表格 createtabletable1(namevarchar(20),date1date)删除表格droptabletest1修改表格表项altertabletable1modif......
  • mysql 怎么与当前日期对比
    项目方案:使用MySQL进行与当前日期的对比1.简介在许多应用中,我们经常需要对数据库中的日期进行对比操作,特别是与当前日期进行对比。MySQL是一个流行的关系型数据库管理系统,它提供了丰富的日期和时间函数,可以方便地与当前日期进行对比。本项目方案将介绍如何使用MySQL进行与当......
  • mysql 怎么查看当前密码要求
    MySQL是一个开源的关系型数据库管理系统,用于存储和管理大量的数据。在MySQL中,可以通过设置密码要求来增加数据库的安全性。下面将介绍如何查看当前密码要求的设置。要查看MySQL当前的密码要求设置,可以使用以下步骤:步骤1:登录MySQL首先,需要登录到MySQL数据库。可以使用命......
  • mysql 预约时间 开始时间 结束时间 查询
    MySQL预约时间查询在许多应用程序中,我们需要管理预约时间。比如,医院预约系统、会议室预约系统等。MySQL是一个流行的关系型数据库管理系统,我们可以使用它来存储和查询预约时间数据。本文将介绍如何使用MySQL进行预约时间的查询操作,并提供相应的代码示例。数据库设计首先,我们需......
  • mysql 用sql修改数据库名
    如何用SQL修改MySQL数据库名概述在MySQL中,我们可以使用SQL语句来修改数据库名。本文将介绍修改数据库名的步骤,并提供相应的代码示例。步骤步骤操作1连接到MySQL服务器2选择要修改的数据库3修改数据库名4验证修改结果详细步骤步骤1:连接到MySQL服务......
  • mysql 异或
    实现MySQL异或的步骤为了教会这位刚入行的小白如何实现MySQL异或,我们将按照以下步骤进行操作。首先,我们需要确保你已经安装了MySQL,并且已经创建了一个数据库和一个表。步骤步骤操作1连接到MySQL数据库2创建一个测试表3插入一些数据4执行异或查询现在,......
  • mysql 一对多关系怎么解决
    MySQL一对多关系的解决方法在MySQL数据库中,一对多关系是指两个表之间存在一个主表和一个从表,主表的每一条记录都可以对应从表中的多条记录。例如,一个订单可以对应多个商品,这就是一个典型的一对多关系。在处理一对多关系时,我们可以使用外键(ForeignKey)来解决。外键是一个指向其......