轉載:https://www.cnblogs.com/jiaxinwei/p/13936273.html
互相是好友:https://www.cnblogs.com/alpha-cat/p/13082553.html
SQL計算最長登錄天數
計算最長登陸天數主要用兩個函數:1.窗口函數row_number()over() 2.date_sub()
1.使用row_number()窗口函數
1 select 2 UID, 3 loadtime, 4 row_number()over(partition by UID order by loadtime) sort 5 from 6 user_login
2.使用date_sub()函數
--取每個用戶的連續登陸天數
1 select 2 UID, 3 date_sub(loadtime,sort) as date_group, --拿登陸時間和排序相減,如果差值是定值,可以分成一組,說明用戶是連續登陸的 4 min(loadtime) as start, 5 max(loadtime) as end , 6 count(1) as continue_days --連續登陸天數 7 from( 8 select 9 UID, 10 loadtime, 11 row_number()over(partition by UID order by loadtime) sort 12 from 13 user_login 14 ) a 15 group by 16 UID, 17 date_sub(loadtime,sort)
3.以UID分組,取max(continue_days)
1 --- 用戶最大登陸天數 2 SELECT 3 UID, 4 max(continue_days) as maxday 5 FROM( 6 select 7 UID, 8 date_sub(loadtime,sort) as date_group, 9 min(loadtime) as start, 10 max(loadtime) as end , 11 count(1) as continue_days 12 from( 13 select 14 UID, 15 loadtime, 16 row_number()over(partition by UID order by loadtime) sort 17 from 18 user_login 19 ) a 20 group by 21 UID, 22 date_sub(loadtime,sort) 23 )t1 24 group by UID