SQL连续登录4天及以上的用户

2023-11-06

需求: 连续登录4天及以上的用户

有一个表login_test,求出连续登录4天及以上的用户
在这里插入图片描述

方法一:

排序窗口函数 row_number()

select *
    ,row_number() over (partition by user_id order by login_date) as ranking
from login_test

结果为:
在这里插入图片描述

可以看到连续登录的话,login_date-ranking的日期应该相等

select
	*,
	date_sub(login_date,interval ranking day) as day
from
(select
	*,
	row_number() over (partition by user_id order by login_date) as ranking
from login_test) t

在这里插入图片描述

然后只需根据user_id和day列进行分组,求count大于4的就可以。完整代码如下:

select
    user_id,
    login_date,
    t.day,
    count(1)
from
(select
    user_id,
    login_date,
    date_sub(login_date,interval row_number() over (partition by user_id order by login_date) day) as day
from login_test
    )t
group by user_id, day
having count(1)>=4

结果如下:
在这里插入图片描述

方法二:

将用户登录的时间向前偏移,如求连续四天登录的用户,只用把日期向前偏移3天,如果偏移之后的日期正好等于登录时间-3天,则表示该用户连续登录了四天。

偏移使用lead()函数

LEAD()是一个Window函数,它提供对当前行之后的指定物理偏移量的行的访问。

例如,通过使用LEAD()函数,可以从当前行访问下一行的数据或下一行之后的行,依此类推。

LEAD()函数对于将当前行的值与后续行的值进行比较非常有用。

以下是LEAD()函数的语法:

LEAD(return_value ,offset [,default]) 
OVER (
    [PARTITION BY partition_expression, ... ]
    ORDER BY sort_expression [ASC | DESC], ...
)

在上面语法中,

  • return_value - 基于指定偏移量的后续行的返回值。返回值必须求值为单个值,不能是另一个Window函数。
  • offset是从当前行转发的行数,用于访问数据。offset可以是表达式,子查询或列,其值为正整数。如果未明确指定,则offset的默认值为1
  • 如果offset超出分区范围,则该函数返回default。 如果未指定,则默认为NULL
  • PARTITION BY子句将结果集的行分配到应用了LEAD()函数的分区。
  • 如果未指定PARTITION BY子句,则该函数将整个结果集视为单个分区。
  • ORDER BY子句指定应用LEAD()函数的每个分区中行的逻辑顺序。

因此使用代码:

select *,
       lead(login_date,3) over(partition by user_id order by login_date desc) as testday
from login_test

得出结果:
在这里插入图片描述

然后筛选出login_date-3等于testday的数据,最后使用group by进行去重就行

select
    user_id
from
     (select user_id,
            login_date,
            lead(login_date,3) over(partition by user_id order by login_date desc) as testday
     from login_test
        )t
where date_sub(login_date ,interval 3 day) = testday and testday is not null
group by user_id
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL连续登录4天及以上的用户 的相关文章

  • SQL Server 2008R2 和创建 XML 文档

    论坛上的第一篇文章 因为我真的被这个问题困住了 以下查询正确地将有效的 XML 文档分配给 xTempXML 变量 类型为 xml 注 文档的长度 转换为varchar max 711 select xTempXML select Pres
  • T-SQL:用最新的非空值替换 NULL 的最佳方法?

    假设我有这张表 id value 1 5 2 4 3 1 4 NULL 5 NULL 6 14 7 NULL 8 0 9 3 10 NULL 我想编写一个查询来替换任何NULL值与表中最后一个不为空的值在那一栏里 我想要这个结果 id va
  • 数据库字段中的逗号分隔值

    我有一个产品表 该表中的每一行对应一个产品 并由唯一的 ID 标识 现在 每个产品都可以有多个与该产品关联的 代码 例如 Id Code 0001 IN ON ME OH 0002 ON VI AC ZO 0003 QA PS OO ME
  • st_intersects 与 st_overlaps

    这两个查询有什么区别 select a gid sum length b the geom from polygons as a roads as b where st intersects a the geom b the geom gr
  • 提高第一个查询的性能

    如果执行以下数据库 postgres 查询 则第二次调用要快得多 我猜第一个查询很慢 因为操作系统 linux 需要从磁盘获取数据 第二个查询受益于文件系统级别和 postgres 中的缓存 有没有一种方法可以优化数据库以快速获得结果fir
  • SQL 连接两个没有关系的表

    我有具有相同结构的不同表 我想通过其中一列将它们连接起来 问题是他们不共享该专栏中的信息 Table 1 Type A Name Value Table 2 Type B Name Value 结果表 在单列中 nameFromA name
  • SQL 约束以防止根据列的先前值更新列

    是否可以使用检查约束 或其他一些技术 来防止在更新记录时设置与其先前值相矛盾的值 一个例子是 NULL 时间戳 表明发生了某些事情 例如 file exported 一旦文件被导出并且具有非 NULL 值 就不应再将其设置为 NULL 另一
  • 如何使用 SQL Server 2008 将行复制到同一个表中

    A 到目前为止我的方式 sqlCommand CommandText INSERT Table1 column1 column2 column3 SELECT column1 column2 column3 FROM Table1 WHER
  • 如何在 SQL Server 中连接

    我的数据库没有特定的列 因此我通过开关在查询中创建了一个列 我需要的是将此列与数据库中的另一列连接起来 select certificateDuration DurationType case when certificateDuratio
  • 我是否需要在外键上指定 ON DELETE NO ACTION?

    我有以下与 SQL Server 2012 一起使用的 DDL CREATE TABLE Subject SubjectId INT IDENTITY 1 1 NOT NULL Name NVARCHAR 50 Not NULL CONST
  • 如何获取自定义订单的结果? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 代替ASC or DESC 我希望我的查询结果采用特定的自定义顺序 例如 如果我想要的结果不是 A B C D 而是 P A L H 该怎么
  • SELECT NULL、*、NULL、NULL 中令人困惑的 SQL 错误

    的背景我试图解决第四个现实任务 https www hackthissite org playlevel 4 在 hackthissite org 中 无法确切地弄清楚我应该在 URL 中注入什么 SQL 来检索电子邮件列表 浪费了几个小时
  • 基于多个表的数据更新单个表 SQL Server 2005,2008

    我需要更新表one使用表中的数据two 表一和表二没有任何公共列相关 桌子three与表相关two 例如 表一 reg det 表 reg det id reg id results 101 11 344 表二 临时表 venue resu
  • 使用默认路径中的文件创建数据库

    我想创建一个创建数据库的 SQL 脚本 现在 我有这个 CREATE DATABASE Documents ON PRIMARY NAME N Documents FILENAME N Documents mdf LOG ON NAME N
  • 如何获取日期时间字段的 UTC?

    我正在使用 MySQL 5 并且正在尝试将日期时间字段转换为 UTC TIMESTAMP 这是我所拥有的 但它不起作用 并且不确定我是否可以做到这一点 但有人可以告诉我我做错了什么吗 谢谢 我已经尝试过这个 SELECT UTC TIMES
  • Oracle SQL 分析查询 - 类似递归电子表格的运行总计

    我有以下数据 由A值 排序依据MM 月 The B列计算为GREATEST current value of A previous value of B 0 以类似电子表格的方式 我怎样才能计算B使用 SQL 查询 我尝试使用分析函数 但未
  • JPA 为每个项目选择最新实例

    假设我有一个会议实体 每次会议都有一个与会者和一个会议日期 在我的会议表中 我可能为每个与会者举行多个会议 每个会议都有不同的日期 我需要一个 JPA 查询 该查询将为所有与会者仅选择最新的会议 例如 如果我的桌子看起来像这样 Meetin
  • 同一表中同一列的 SQL 完全外连接

    这可能更多的是一个设计问题 但我希望这在没有太多巫术的情况下是可能的 假设我有一个这样的表 SELECT FROM stuff id grp 1 a 2 a 3 a 1 b 2 b 4 b 我想要得到这样的东西 ID 按列分组 a id b
  • 如何使用单个查询对从另一个表检索的表列表进行 UNION?

    我有一个表 其中包含 PostgreSQL 中的表列表 id table 1 table1 2 table2 3 table3 我想从所有这些表的联合中进行选择 例如 伪代码 select from union select table f
  • 如何创建从表中最大值开始的 Oracle 序列?

    尝试在 Oracle 中创建一个以特定表中的最大值开始的序列 为什么这不起作用 CREATE SEQUENCE transaction sequence MINVALUE 0 START WITH SELECT MAX trans seq

随机推荐

  • python分布爬虫基础知识day2

    url详解 URL是Uniform Resource Locator的简写 统一资源定位符 一个URL由以下几部分组成 scheme host port path query string xxx anchor scheme 代表的是访问的
  • mybatis类型转化问题:Error querying database. Cause: java.lang.NumberFormatException: For input string: “X“

    问题mappaer中if判断语句失效 xxxMapper xml
  • RestHighLevelClient API使用举例

    这里写自定义目录标题 直接来例子 新的改变 功能快捷键 合理的创建标题 有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中 居左 居右 SmartyPants 创
  • jsp导出word 带图片

    1 将word另存为html格式 然后将html格式的文件另存为jsp格式 2 在jsp页面中添加表头 3 将输出的内容加到对应的列 4 输出的图片从数据库中取出 上传到服务器的临时目录下 获取图片的绝对路径 将绝对路径输出到页面 Blob
  • JavaScript-数组操作方法汇总

    一直以来都想把js中操作数组的所有方法进行一个汇总 今天终于完成了 希望可以给大家带来一些便利 一 ES5数组操作方法 转换方法 toString 返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串 toLocaleString
  • 医院信息管理系统/医院管理系统的设计与实现

    摘 要 21世纪的今天 随着社会的不断发展与进步 人们对于信息科学化的认识 已由低层次向高层次发展 由原来的感性认识向理性认识提高 管理工作的重要性已逐渐被人们所认识 科学化的管理 使信息存储达到准确 快速 完善 并能提高工作管理效率 促进
  • 【前端】Vue项目:旅游App-(6)city:隐藏TabBar的2种方法

    文章目录 目标 过程与代码 方法1 通过路由隐藏 方法2 用样式隐藏 对方法2封装 总代码 修改的文件 common css index js city vue 目标 city页是点击上篇 广州 位置所跳转的页面 此页面要隐藏TabBar
  • 用友实训控制系统服务器,服务器环境配置实训.doc

    服务器环境配置实训 系统环境建设 1 1 背 景 知 识 1 1 1 生产制造管理概述 1 生产类型 首先 我们对生产给一个通用的定义 生产是在经济上和管理上有效地建立起来的一个过程 它将一些输入转换成商品或服务 一般将生产分为开采 提炼
  • 成功解决OSError: Looks like you do not have git-lfs installed, please install. 【没有root权限】

    成功解决OSError Looks like you do not have git lfs installed please install You can install from http 问题描述 什么是git LFS 解决方案 没
  • 算法提高(VIP)——最长公共子序列

    题目描述 给定两个字符串 寻找这两个字串之间的最长公共子序列 输入格式 输入两行 分别包含一个字符串 仅含有小写字母 输出格式 最长公共子序列的长度 样例输入 abcdgh aedfhb 样例输出 3 题解 动态规划 f i j 集合 所有
  • visio导出高质量图片

    具体操作如下 首先 ctrl A 然后选择 另存为 保存类型选择 Tag图像文件格式 接着在输出里面设置 压缩格式选为 LZW 接着是 256色 然后选择 打印机 下面是 源 然后点击确定就可以了 这样绝对是满足投稿要求的 分辨率为300d
  • 使用jQuery ajax解决mailchimp注册表单二次跳转问题

    当我们在mailchimp后台创建好表单之后 将表单html复制到我们的网站 我们发现 在提交表单时会再次跳转到一个mailchimp表单提交页面 且无法控制表单提交成功之后的逻辑 如果我们能做到自己提交表单异步请求 然后就能控制mailc
  • ubuntu unable to connect to rdp server

    今天早上开机 远程连接win 提示unable to connect to rdp server 昨天还好好的 怎么今天突然不行了 telnet win 的3389端口 是通的 用remina remote desktop client 连
  • linux基础之用户和用户组

    目录 一 用户 1 用户文件 2 查看用户时 cy x 1000 1000 cy home cy bin bash 3 useradd 添加用户 4 passwd 修改密码 要到root用户下 5 su 切换用户 6 userdel 删除用
  • c语言---字符串为什么不能修改内容???字符串常量存放在常量区吗???

    疑惑 1 const修饰的变量都存放在常量区吗 2 字符串常量存放在那 为什么字符型指针 char 指向字符串不能修改其内容 字符串的演变 char p 123456 123456 常量字符串 char static const char
  • Linux专栏的卷首语

    2023年5月15日 周一早上 昨天我决定为了找工作而开始深入学习Linux 于是今天早上开一个Linux专栏来记录我的学习记录 之前我因为感兴趣曾经学习过一段时间的Linux 之前因为看不到学习Linux的好处而放弃了对Linux的学习
  • 神经网络学习小记录45——Keras常用学习率下降方式汇总

    神经网络学习小记录45 Keras常用学习率下降方式汇总 2020年5月19日更新 前言 为什么要调控学习率 下降方式汇总 1 阶层性下降 2 指数型下降 3 余弦退火衰减 4 余弦退火衰减更新版 2020年5月19日更新 增加了论文中的余
  • JVM性能调优实战

    JVM调优调什么 JVM 调优是一个系统而又复杂的过程 但我们知道 在大多数情况下 我们基本不用去调整 JVM 内存分配 因为一些初始化的参数已经可以保证应用服务正常稳定地工作了 而且一般情况下 就算出现了 也是架构师级别的去处理 实际上
  • c++ to_string、stoi()、atoi()使用

    1 to string 包含在 include
  • SQL连续登录4天及以上的用户

    需求 连续登录4天及以上的用户 有一个表login test 求出连续登录4天及以上的用户 方法一 排序窗口函数 row number select row number over partition by user id order by