【SQL】查詢連續登陸天數


數據庫工程師或者ETL工程師可能會遇到的問題:

查詢連續登陸的天數,起始登陸日期,結束登陸日期,連續登陸天數

表結構和數據(有重復數據)如下: 

 

 

原理:使用Rank 排序,得到序號,登陸日期和需要相減,得到起始日期作為附注日期,再根據用戶id和輔助日期進行分組即可。 

廢話不多說直接上代碼:

MySQL(不支持rank函數,通過白能量的形式實現): 

select user_id,
min(login_time) 起始登錄日期,
max(login_time) 結束登錄日期,
count(login_time) 連續登錄天數
from (select *, DATE_SUB(login_time,INTERVAL rank DAY) 輔助日期列
from (select *,@rank := @rank + 1 AS rank
from (select distinct user_id,DATE(login_time) as login_time
from user_login_log) as a, (SELECT @rank := 0) as tmp order by user_id,login_time) as a) as c

group by user_id,輔助日期列
-- having count(login_time) > 3

MySQL 參考自 :https://blog.csdn.net/github_38426094/article/details/80492093

SQL Server :

select id,
min(date_time) 起始登錄日期,
max(date_time) 結束登錄日期,
count(date_time) 連續登錄天數
from (select *, DATEADD(day, -od, date_time) 輔助日期列
from (select *,rank() over(partition by id order by date_time) as od
from (select distinct id,date_time
from testdate) as a) as b) as c

group by id,輔助日期列

 

以上


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM