【SQL】查詢連續登陸7天以上的用戶


查詢7天連續登陸用戶這個問題很經典,解決方法也有很多,這里我講一下筆者的方法,希望對大家有幫助。

具體思路:

1、因為每天用戶登錄次數可能不止一次,所以需要先將用戶每天的登錄日期去重。

2、再用row_number() over(partition by _ order by _)函數將用戶id分組,按照登陸時間進行排序。

3、計算登錄日期減去第二步驟得到的結果值,用戶連續登陸情況下,每次相減的結果都相同。

4、按照id和日期分組並求和,篩選大於等於7的即為連續7天登陸的用戶。

表信息如下圖

 

第一步:用戶登錄日期去重

select DISTINCT date(date) as 日期,id from orde;

 結果為:

第二步:用row_number() over()函數計數

 

select *,row_number() over(PARTITION by id order by 日期) as cum from (select DISTINCT date(date) as 日期,id from orde)a;

 

結果為:

第三步:日期減去計數值得到結果

 

select *,date(日期)-cum as 結果 from (select *,row_number() over(PARTITION by id order by 日期) as cum from (select DISTINCT date(date) as 日期,id from orde)a)b;

 

結果:

第四步:根據id和結果分組並計算總和,大於等於7的即為連續登陸7天的用戶

 

select id,count(*) from (select *,date(日期)-cum as 結果 from (select *,row_number() over(PARTITION by id order by 日期) as cum from (select DISTINCT date(date) as 日期,id from orde)a)b)c GROUP BY id,結果 having count(*)>=7;

 

結果為:

 

用了多次嵌套查詢,最終得到我們需要的結果。

 

 

 

 

 


免責聲明!

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



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