SQL查詢語句求出用戶的連續(xù)登陸天數(shù)
一、題目描述
求解用戶登陸信息表中,每個用戶連續(xù)登陸平臺的天數(shù),連續(xù)登陸基礎為匯總日期必須登陸,表中每天只有一條用戶登陸數(shù)據(jù)(計算中不涉及天內去重)。
表描述:user_id:用戶的id;
sigin_date:用戶的登陸日期。
二、解法分析
注:求解過程有多種方式,下述求解解法為筆者思路,其他解法可在評論區(qū)交流。
思路:
該問題的突破的在于登陸時間,計算得到連續(xù)登陸標識,以標識分組為過濾條件,得到連續(xù)登陸的天數(shù),最后以user_id分組,以count()函數(shù)求和得到每個用戶的連續(xù)登陸天數(shù)。
連續(xù)登陸標識 =(當日登陸日期 - 用戶的登陸日期)- 開窗排序的順序號(倒序)
三、求解過程及結果展示
1.數(shù)據(jù)準備
-- 1.建表語句 drop table if exists test_sigindate_cnt; create table test_sigindate_cnt( user_id string ,sigin_date string ) ; -- 2.測試數(shù)據(jù)插入語句 insert overwrite table test_sigindate_cnt select 'uid_1' as user_id,'2021-08-03' as sigin_date union all select 'uid_1' as user_id,'2021-08-04' as sigin_date union all select 'uid_1' as user_id,'2021-08-01' as sigin_date union all select 'uid_1' as user_id,'2021-08-02' as sigin_date union all select 'uid_1' as user_id,'2021-08-05' as sigin_date union all select 'uid_1' as user_id,'2021-08-06' as sigin_date union all select 'uid_2' as user_id,'2021-08-01' as sigin_date union all select 'uid_2' as user_id,'2021-08-05' as sigin_date union all select 'uid_2' as user_id,'2021-08-02' as sigin_date union all select 'uid_2' as user_id,'2021-08-06' as sigin_date union all select 'uid_3' as user_id,'2021-08-04' as sigin_date union all select 'uid_3' as user_id,'2021-08-06' as sigin_date union all select 'uid_4' as user_id,'2021-08-03' as sigin_date union all select 'uid_4' as user_id,'2021-08-02' as sigin_date ;
2.計算過程
select user_id ,count(1) as sigin_cnt from ( select user_id ,datediff('2021-08-06',sigin_date) as data_diff ,row_number() over (partition by user_id order by sigin_date desc) as row_num from test_sigindate_cnt ) t where data_diff - row_num = -1 group by user_id ;
3.計算結果及預期結果對比
3.1 預期結果
匯總日期 | 用戶id | 登陸天數(shù) |
2021-08-06 | uid_1 | 6 |
2021-08-06 | uid_2 | 2 |
2021-08-06 | uid_3 | 1 |
3.2 計算結果
以上就是SQL查詢語句求出用戶的連續(xù)登陸天數(shù)的詳細內容,更多關于SQL語句求用戶的連續(xù)登陸天數(shù)的資料請關注腳本之家其它相關文章!
相關文章
sql server編寫archive通用模板腳本實現(xiàn)自動分批刪除數(shù)據(jù)
這篇文章主要介紹了sql server編寫archive通用模板腳本實現(xiàn)自動分批刪除數(shù)據(jù),需要的朋友可以參考下2019-10-10sqlserver數(shù)據(jù)庫中的表、字段sql語句
在數(shù)據(jù)庫中創(chuàng)建的每個對象(例如約束、默認值、日志、規(guī)則以及存儲過程)都對應一行。2010-06-06SQLServer2019 數(shù)據(jù)庫環(huán)境搭建與使用的實現(xiàn)
這篇文章主要介紹了SQLServer2019 數(shù)據(jù)庫環(huán)境搭建與使用的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-04-04詳解SQL Server數(shù)據(jù)庫鏈接查詢的方式
本文我們主要介紹了SQL Server數(shù)據(jù)庫鏈接查詢的方式,包括內連接、外連接和交叉連接等的內容,需要的朋友可以參考下2015-08-08sqlserver四舍五入使用round函數(shù)及cast和convert函數(shù)
大家在遇到sqlserver四舍五入除了用round函數(shù)還有沒有其他方法呢?下面小編給大家介紹使用cast和convert函數(shù),感興趣的朋友一起學習吧2015-11-11