SQL查询用户连续N天登录

 更新时间:2024年09月02日 11:18:38   作者:黑白交界  
业务中常见分析之一是分析用户连续登录使用情况,本文主要介绍了SQL查询用户连续N天登录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

业务中常见分析之一是分析用户连续登录使用情况,这也对应着SQL常见面试题——用户连续N天登录问题。

我们假设现在有一张用户登录信息表user_login_info,表中字段有用户id(uid)、登录时间(login_time)。表中数据如下所示:

现在要求查询出连续登录N天的用户。

(1) 首先我们要对用户登录表进行去重操作,以避免用户当天多次登录情况对查询结果产生影响。这里用到了distinct关键词。

select
	uid, 
	distinct date(login_time) as login_time 
from user_login_info

(2)其次我们使用窗口排名函数row_number对同一用户的不同登录时间进行排名,得到新一列为rk。

select
    uid, 
	login_time, 
	row_number() over(partition by uid order by login_time) as rk
from
(
	select
	    uid, 
		distinct date(login_time) as login_time 
	from user_login_info
) t1

查询结果如图所示:

(3)之后用date_sub函数计算登录时间login_time一列加上rk天之后生成新的一列sub_date。假如在表格中,同一用户的sub_date相同则说明相同sub_date数据的行是连续登录使用的情况。

select *, DATE_SUB(login_time, INTERVAL rk DAY) as sub_date
from
(
	select
		uid, 
		login_time, 
		row_number() over(partition by uid order by login_time) as rk
    from
    (
	    select
			uid, 
			distinct date(login_time) as login_time 
		from user_login_info
	) t1
) t2

查询结果如图所示:

(4)之后我们对得到的查询结果,按照用户id,登录时间进行分组计数,得到的计数结果就是用户连续登录多少天的情况记录。

select uid, count(*) as 连续登录天数
from
(
	SELECT *, DATE_SUB(login_time, INTERVAL rk DAY) AS sub_date
	from
	(
		select
			uid, 
			login_time, 
			row_number() over(partition by uid order by login_time) as rk
		from
		(
			select
				uid, 
				distinct date(login_time) as login_time 
			from user_login_info
		) t1
	) t2
) t3
group by uid, sub_date

(5)之后我们可以在此查询结果上,根据需要用having条件就可以筛选出我们想要得知的连续N天登录的用户id

完整代码如下:

select uid, count(*) as 连续登录天数
from
(
	SELECT *, DATE_SUB(login_time, INTERVAL rk DAY) AS sub_date
	from
	(
		select
			uid, 
			login_time, 
			row_number() over(partition by uid order by login_time) as rk
		from
		(
			select
				uid, 
				distinct date(login_time) as login_time 
			from user_login_info
		) t1
	) t2
) t3
group by uid, sub_date
having 连续登录天数 = N

到此这篇关于SQL查询用户连续N天登录的文章就介绍到这了,更多相关SQL查询连续N天登录内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • SQL Server分页方法汇总

    SQL Server分页方法汇总

    这篇文章介绍了SQL Server分页的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • SQL命令大全-中英文对照

    SQL命令大全-中英文对照

    SQL命令大全-中英文对照...
    2007-11-11
  • 通过navicat连接SQL Server数据库的详细步骤

    通过navicat连接SQL Server数据库的详细步骤

    本文介绍如何通过navicat连接SQL Server数据库,以往总是使SQL Server客户端来连接SQL Server数据库,但是SQL Server客户端一般有几百M的大小,而且安装繁琐配置麻烦,如果可以通过Navicat直接连接SQL Server则会非常轻松方便,需要的朋友可以参考下
    2023-12-12
  • 用SQL语句添加删除修改字段、一些表与字段的基本操作、数据库备份等

    用SQL语句添加删除修改字段、一些表与字段的基本操作、数据库备份等

    用SQL语句添加删除修改字段、一些表与字段的基本操作、数据库备份等,需要的朋友可以参考下。
    2011-11-11
  • SQLServer临时存储过程及示例

    SQLServer临时存储过程及示例

    本文主要介绍了SQL Server临时存储过程及示例,分为局部临时存储过程和全局临时存储过程,下面就来具体介绍一下,感兴趣的可以一起来了解一下
    2024-08-08
  • SQL Server数据库自动收缩配置指南

    SQL Server数据库自动收缩配置指南

    在数据库管理中,随着数据的增删,数据库文件的大小会不断变化,导致空间浪费和性能下降,SQL Server提供了自动收缩功能,本文将深入探讨如何在SQL Server中配置数据库的自动收缩,需要的朋友可以参考下
    2024-07-07
  • 获取SqlServer存储过程定义的三种方法

    获取SqlServer存储过程定义的三种方法

    这篇文章主要介绍了获取SqlServer存储过程定义的三种方法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • SQL Server 2016 配置 SA 登录教程

    SQL Server 2016 配置 SA 登录教程

    这篇文章主要介绍了SQL Server 2016 配置 SA 登录教程以及sqlserver2016 sa账号登录不上的解决方法,需要的朋友可以参考下
    2017-04-04
  • SQL Server文件组的用法和原理

    SQL Server文件组的用法和原理

    数据文件的组合,称作文件组(File Group),数据库不能直接设置存储数据的数据文件,而是通过文件组来指定,本文给大家详细的介绍了SQL Server文件组,并通过代码讲解的非常详细,需要的朋友可以参考下
    2024-03-03
  • SQLServer2019安装教程图文详解

    SQLServer2019安装教程图文详解

    这篇文章主要介绍了SQLServer2019安装教程图文详解,本文通过图文并茂的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02

最新评论