Hive SQL間隔連續問題

問題引入

下面是某游戲公司記錄的用戶每日登錄數據, 計算每個用戶最大的連續登錄天數,定義連續登錄時可以間隔一天。舉例:如果一個用戶在 1,3,5,6,9 登錄了游戲,則視為連續 6 天登錄。

id          dt1001    2021-12-121002    2021-12-121001    2021-12-131001    2021-12-141001    2021-12-161002    2021-12-161001    2021-12-191002    2021-12-171001    2021-12-20

這是個連續問題的升級版,當滿足某種要求時我們也是算作連續的,所以不能使用傳統的連續編號,然后做差值的解法了。核心思路解析如下:

這種解法是比較常見的,很多場景都可以這樣使用。還有比如計算用戶的會話數,當兩次會話時間超過1分鐘時就算做不同的會話,也可以這樣做。

#這里假設樣例數據存在tmp表里面
select
user_id
,max(diff) as max_login_days
from
(selectuser_id ,user_group,datediff(date(max(dt)),date(min(dt)),'dd')+1 as diff  --拿到每個用戶下,連續時間里面最大日期與最小日期的差值加1就得到來連續天數from(selectuser_id,dt-- 如果當前日期與上一個日期的差值在2之內,那么就給0,否則給1,sum(if(datediff(date(dt),date(last_dt),'dd')<=2,0,1)) over(partition by user_id order by dt) as user_groupfrom(selectuser_id,dt,lag(dt,1,dt) over(partition by user_id order by dt) as last_dt --根據user_id分組,拿到當前行的上一個日期,沒有上一個就給自己本身的值from tmp)t1)t1group by user_id ,user_group
)t1
group by user_id 
;

?思考: 為什么user_group這個字段可以作為分組條件?

  1. 條件求和

    ? ? ? if(datediff(date(dt),date(last_dt),'dd')<=2,0,1)這個條件判斷當前行日期與上一行日期的差異。如果差異小于或等于2天,則返回0,否則返回1。
  2. 累加生成user_group

    • 窗口函數 SUM(...) OVER(...) 的工作方式是在指定的窗口內累加值。在這種情況下,窗口是由 PARTITION BY user_id ORDER BY dt 定義的,這意味著:累加是在每個 user_id 分區內獨立進行的,所以不同用戶的累加是隔離的。在每個分區內,累加是按照日期 dt 的順序進行的。

    • 對于連續登錄的日期(差異小于等于2天),由于返回的是0,sum函數累加值不變,表示這些日期屬于同一個登錄周期。

相似問題

問題:如下為某電商公司用戶訪問網站的數據,包括用戶id和訪問時間兩個字段。現有如下規則:如果某個用戶的連續的訪問記錄時間間隔小于60秒,則屬于同一個會話,現在需要計算每個用戶有多少個會話。比如A用戶在第1秒,60秒,200秒,230秒有三次訪問記錄,則該用戶有2個會話,其中第一個會話是第1秒和第60秒的記錄,第二個會話是第200秒和230秒的記錄。

user_id     ts1001    169200000001001    169200000501002    169200000651002    169200000801001    169200001501002    16920000160
#sql可以簡化,這里只是為了拆分每一步是如何做的而沒有做合并。
with tmp as (select 1001 as user_id,16920000000 as tsunion allselect 1001 as user_id,16920000050 as tsunion allselect 1002 as user_id,16920000065 as tsunion allselect 1002 as user_id,16920000080 as tsunion allselect 1001 as user_id,16920000150 as tsunion allselect 1002 as user_id,16920000160 as ts
)
select
user_id
,count(distinct user_group) as user_group_cnt
from
(selectuser_id,ts-- 開窗做累加,sum(flag) over(partition by user_id order by ts) as user_groupfrom(selectuser_id,ts-- 判斷當前行的時間與上一行的差值,if(ts-last_ts<60,0,1) as flagfrom(selectuser_id,ts-- 取當前行的上一個時間,沒有上一行就給自身的時間,lag(ts,1,ts) over(partition by user_id order by ts) as last_tsfrom tmp)t1)t1
)t1
group by user_id
;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211450.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211450.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211450.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

visual studio code 好用的插件

vscode-icons Better comments 該插件對不同類型的注釋會附加了不同的顏色&#xff0c;更加方便區分&#xff0c;幫助我們在代碼中創建更人性化的注釋。 Error Lens Error Lens插件是一款可以檢測你編寫的代碼的語法錯誤&#xff0c;并且會顯示出對語法錯誤的診斷信息…

USB的高速速率是如何確定的?

從全局說起。先說host對dev的插入檢測。由于dev插入到host&#xff0c;導致為0的D和D-線突然有了電平變化&#xff0c;有且只有一根線的電平會變。在高速和全速模式下&#xff0c;D線會被拉高&#xff1b;在低速模式下D-線會被拉高。同時&#xff0c;host會對插入的dev進行消抖…

RCNN 學習

RCNN算法流程 RCNN算法流程可分為4個步驟 一張圖像生成1K~2K個候選區域&#xff08;使用Selective Search方法&#xff09;對每個候選區域&#xff0c;使用深度網絡圖特征特征送入每一類的SVM分類器&#xff0c;判別是否屬于該類使用回歸期器細修正候選框位置 1.候選區域的生…

【星海隨筆】Prometheus(一)

注&#xff1a;Pagerduty作為報警系統&#xff0c;出鏡率很高。 雖然收費&#xff0c;但對于企業來說很便宜。 一個月幾十美金 不太支持中文&#xff0c;主要是語音方面。 Prometheus 查詢語句 &#xff0c; 基于數學運算模式的監控查詢 我們計算一下一天多少秒 1 * 24 * 60 *…

ChatGPT是科學還是藝術?

OpenAI最近談到GPT4變懶的問題&#xff0c;說“它更像是多人共同參與的藝術創作”&#xff0c;那到底大模型是科學還是藝術&#xff1f;

公式識別任務各個鏈條全部打通

目錄 引言公式識別任務是什么&#xff1f;公式識別任務解決方案初探使用建議寫在最后 引言 隨著LaTeX-OCR模型轉換問題的解決&#xff0c;公式識別任務中各個鏈條已經全部打通。小伙伴們可以放開膀子干了。 解決業界問題的方案&#xff0c;并不是單獨訓練一個模型就完事了&am…

如何確認網站是否有漏洞,如何找出網站存在的漏洞,找到漏洞該如何處理

如何確認網站或者服務器是否有漏洞 判斷一個網站是否是存在漏洞的方法&#xff1a; 1.可以借助德迅云安全漏洞掃描功能來檢查漏洞。 2.打開德迅云安全首頁&#xff0c;點擊最上面導航欄中的“安全產品”。 3.滑到“漏洞掃描”&#xff0c;選擇“產品價格”服務。 4.選擇您需…

【力扣】141和142環形鏈表

141.環形鏈表 法一&#xff1a;快慢指針 思路&#xff1a; 用兩個指針slow,fast,后者能比前者多走一步路&#xff0c;那判斷是不是有環&#xff0c;只需要判斷是否會相遇。 就是有一個能比烏龜跑2倍快的兔子&#xff0c;兩小只都在有環的路上跑&#xff0c;那是不是肯定會相…

golang開發之個微機器人的二次開發

簡要描述&#xff1a; 下載消息中的文件 請求URL&#xff1a; http://域名地址/getMsgFile 請求方式&#xff1a; POST 請求頭Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 參數&#xff1a; 參數名必選類型…

java基礎之TreeMap詳解

TreeMap詳解 TreeMap是Map接口的一個實現類&#xff0c;底層基于紅黑樹的實現&#xff0c;按照key的順序存儲 TreeMap 從繼承結構可以看到TreeMap除了繼承了AbstractMap類&#xff0c;還實現了NavigableMap接口&#xff0c;而NavigableMap接口是繼承自SortedMap接口的&#xff…

使用Vue3+Typescript手寫一個日歷簽到組件

設計理念 昨天寫了個簡單美觀的日歷簽到組件&#xff0c;使用的是Vue3TypeScript&#xff0c;大概邏輯是先找到本月份第一天是周幾&#xff0c;然后開始填充月份日期&#xff1a;weeksArray:[[]]:之后渲染到表格中&#xff0c;對于簽到事件觸發則先判斷是否是今天且還未沒有簽…

【PyTorch】模型訓練過程優化分析

文章目錄 1. 模型訓練過程劃分1.1. 定義過程1.1.1. 全局參數設置1.1.2. 模型定義 1.2. 數據集加載過程1.2.1. Dataset類&#xff1a;創建數據集1.2.2. Dataloader類&#xff1a;加載數據集 1.3. 訓練循環 2. 模型訓練過程優化的總體思路2.1. 提升數據從硬盤轉移到CPU內存的效率…

SPRD Android 13 需要在設置--顯示--鎖定屏幕--雙行時鐘--<關閉>

開始去改默認值沒生效 --- a/frameworks/base/packages/SettingsProvider/res/values/defaults.xml +++ b/frameworks/base/packages/SettingsProvider/res/values/defaults.xml @@ -336,4 +336,6 @@<integer name="def_navigation_bar_config">0</integer…

西南科技大學數字電子技術實驗三(MSI邏輯器件設計組合邏輯電路及FPGA的實現)FPGA部分

一、實驗目的 進一步掌握MIS(中規模集成電路)設計方法。通過用MIS譯碼器、數據選擇器實現電路功能,熟悉它們的應用。進一步學習如何記錄實驗中遇到的問題及解決方法。二、實驗原理 1、4位奇偶校驗器 Y=S7i=0DiMi D0=D3=D5=D6=D D1=D2=D4=D7= `D 2、組合邏輯電路 F=A`B C …

面試計算機網絡八股文五問五答第二期

面試計算機網絡八股文五問五答第二期 作者&#xff1a;程序員小白條&#xff0c;個人博客 相信看了本文后&#xff0c;對你的面試是有一定幫助的&#xff01; ?點贊?收藏?不迷路&#xff01;? 1.OSI七層協議&#xff1f; 2. TCP和UDP傳輸協議的區別&#xff1f; TCP是可…

C語言_常見位操作

C語言_常見位操作 文章目錄 C語言_常見位操作一、位操作函數二、代碼示例 一、位操作函數 設置某位為1或者對某位清0、獲取某位的值、對某位取反 /*對某位置1*/ unsigned Setbit(unsigned x,int n) {return x | 1 << n; }/*對某位清0*/ unsigned Resetbit(unsigned x,…

為什么要用向量檢索

之前寫過一篇文章&#xff0c;是我個人到目前階段的認知&#xff0c;所做的判斷。我個人是做萬億級數據的搜索優化工作的。一直在關注任何和搜索相關的內容。 下一代搜索引擎會什么&#xff1f;-CSDN博客 這篇文章再來講講為什么要使用向量搜索。 在閱讀這篇文章之前呢&#xf…

【網絡安全】網絡設備可能面臨哪些攻擊?

網絡設備通常是網絡基礎設施的核心&#xff0c;并控制著整個網絡的通信和安全&#xff0c;同樣面臨著各種各樣的攻擊威脅。 對網絡設備的攻擊一旦成功&#xff0c;并進行暴力破壞&#xff0c;將會導致網絡服務不可用&#xff0c;且可以對網絡流量進行控制&#xff0c;利用被攻陷…

【JavaEE】線程池

作者主頁&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感謝你閱讀本文&#xff0c;歡迎一建三連哦。 本文于《JavaEE》專欄&#xff0c;本專欄是針對于大學生&#xff0c;編程小白精心打造的。筆者用重金(時間和精力)打造&…

springcloud分布式事務

文章目錄 一.為什么引入分布式事務?二.理論基礎1.CAP定理2.BASE理論 三.Seata1.微服務集成Seata2.XA模式(掌握)3.AT模式(重點)4.TCC模式(重點)5.Saga模式(了解) 四.四種模式對比五.Seata高可用 一.為什么引入分布式事務? 事務的ACID原則 在大型的微服務項目中,每一個微服務都…