连续登录天数计算
最近有個(gè)需求,計(jì)算用戶連續(xù)登錄的最大天數(shù)(這里使用prestoSql,使用hive也可以),先看下登錄日志數(shù)據(jù)表hive.traffic.access_user只有兩個(gè)字段:uid,day;日期輔助表hive.ods.dim_date,這個(gè)表只有一個(gè)字段day;
先說(shuō)下思路,
| 101 | 20190911 | 1 | 20190911-1=20190910 |
| 101 | 20190912 | 2 | 20190912-2=20190910 |
| 101 | 20190913 | 3 | 20190913-3=20190910 |
| 101 | 20190916 | 4 | 20190916-4=20190912 |
| 101 | 20190917 | 5 | 20190917-5=20190912 |
從上可以看到,只要是連續(xù)登錄的話,day-rownumber的差值是一樣的,那問(wèn)題來(lái)了,這樣的減法在跨月或者跨年的時(shí)候會(huì)出問(wèn)題,所以我們首先將日期轉(zhuǎn)換成有序的數(shù)字
select day,ROW_NUMBER() OVER(ORDER BY day) daynum from hive.ods.dim_date
接下來(lái),我們需要將用戶登錄日志按照uid分組,然后按照日期排序,然后計(jì)算出rownumber
接下來(lái)就是計(jì)算差值,差值相同的代表連續(xù)登錄日期,完整sql如下
end
總結(jié)
- 上一篇: 纳斯达克的区块链野望
- 下一篇: 根据天数计算日期