当前位置:网站首页>SQL query users logged in for three consecutive days

SQL query users logged in for three consecutive days

2022-06-11 03:36:00 Xinxin s

Ideas :

1、 Because users may log in more than once a day , Therefore, you need to reset the user's login date every day .
2、 Reuse row_number() over(partition by _ order by _) The function will the user id grouping , Sort by login date .
3、 Calculate the login date minus the result value obtained in step 2 , When the user logs in continuously , The result of subtraction is the same .
4、 according to id And date group and count , Filter is greater than or equal to 3 Is continuous 3 Days of users .

The database I use is SQL Server 2014

Create table statement :
create table user_login(
    user_id int,
    login_time datetime,
)
Add data :
insert into user_login values (1,'2022-06-01 11:00:00.000');
insert into user_login values (1,'2022-06-01 12:00:00.000');
insert into user_login values (1,'2022-06-01 12:00:00.000');
insert into user_login values (1,'2022-06-02 11:00:00.000');
insert into user_login values (1,'2022-06-03 11:00:00.000');
insert into user_login values (2,'2022-06-01 11:00:00.000');
insert into user_login values (2,'2022-06-02 11:00:00.000');
insert into user_login values (2,'2022-06-04 11:00:00.000');
insert into user_login values (3,'2022-06-01 11:00:00.000');
insert into user_login values (3,'2022-06-02 11:00:00.000');
insert into user_login values (3,'2022-06-04 11:00:00.000');
insert into user_login values (3,'2022-06-05 11:00:00.000');
insert into user_login values (3,'2022-06-06 11:00:00.000');
insert into user_login values (3,'2022-06-07 11:00:00.000');
insert into user_login values (3,'2022-06-08 11:00:00.000');
Query statement
select
B.user_id
from
(
	select
	A.user_id,
	A.login_date,
	datediff (day,A.login_date,A.rn)  AS inteval_days
	from
	(
		select
		user_id,
		CONVERT(varchar(100), login_time, 23) login_date,
		row_number() over (partition by user_id order by CONVERT(varchar(100), login_time, 23)) as rn
		from
		user_login
	)A
)B
group by B.user_id,B.inteval_days
having count(1) >= 3;
Query results

 Insert picture description here

原网站

版权声明
本文为[Xinxin s]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/162/202206110315361531.html