連續登入天數計算

2022-06-24 02:39:07 字數 1672 閱讀 7499

最近有個需求,計算使用者連續登入的最大天數(這裡使用prestosql,使用hive也可以),先看下登入日誌資料表hive.traffic.access_user只有兩個字段:uid,day;日期輔助表hive.ods.dim_date,這個表只有乙個欄位day;

先說下思路,

uidday

rownumber

day-rownumber【days】

10120190911

120190911-1=20190910

10120190912

220190912-2=20190910

10120190913

320190913-3=20190910

10120190916

420190916-4=20190912

10120190917

520190917-5=20190912

從上可以看到,只要是連續登入的話,day-rownumber的差值是一樣的,那問題來了,這樣的減法在跨月或者跨年的時候會出問題,所以我們首先將日期轉換成有序的數字

接下來,我們需要將使用者登入日誌按照uid分組,然後按照日期排序,然後計算出rownumber

接下來就是計算差值,差值相同的代表連續登入日期,完整sql如下

with a as (select uid,day from hive.traffic.access_user where day>=20190801 and uid<>''),

b as (select uid,day,row_number() over(partition by uid order by uid,day) rownum from a group by day,uid ),

c as(select day,row_number() over(order by day) daynum from hive.ods.dim_date),

d as (select uid,b.day,daynum,rownum,daynum-rownum days from b join c on b.day=c.day )

select uid,min(day)"連續登入開始日",count(*) "連續登入天數" from d group by uid,days

Hive sql 查詢連續登入天數

目前有兩列資料,分別是使用者id和使用者登入的時間,現需要統計使用者連續登入的最大天數,中間如有斷開,則不算連續,如下圖示例。在hive中進行操作,首先啟動hadoop集群環境,進入到hadoop安裝目錄,sbin start dfs.sh,jps檢視hadoop集群有無正常啟動 正常啟動後,輸入h...

python計算連續登入天數或者多少天沒登入

最近有個需求,需要計算使用者多少天沒登入 我想出來的思路是 1.從資料庫中獲取使用者最新的登入時間 2.獲取今天的時間 3.用今天的時間減去使用者最新的登入時間,這樣就可以獲取到多少天沒登入了,或者說是有沒有連續登入 需要注意的是,這裡都得換成時間戳來計算 不然遇到跨月或者跨年的時候會出問題 那麼就...

hive上連續登入天數的查詢

1 資料測試表及測試資料 測試表表結構 hive desc data room okroomid string pt month string pt day string partition information col name data type comment pt month string...