SQL常用算法-判斷數據是否連續
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
常見場景 經常會遇到一些分析連續次數類的需求,會需要對數據判斷是否連續,比如“用戶是否連續登入" ,“最多連續點擊次數”等等。 對于連續2次,連續3次這種固定的連續次數的需求,我們可以通過自關聯數據表(join)2次或者3次或者lead/lag開窗函數實現。 而對于不確定連續次數的需求,比如連續出現100次,總不能進行100次自關聯或者寫100個函數,因此我們可以增加輔助列的方式判斷是否連續,我們可以通過整體自然排序-分組排序的做法進行判斷 示例 我們直接引用某網站上的示例數據:有Logs表包含id列和num列 需求:查詢所有至少連續出現三次的數字 具體數據如下: Logs 表: +----+-----+ | id | num | +----+-----+ | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 2 | | 5 | 1 | | 6 | 2 | | 7 | 2 | +----+-----+ 1.通過自關聯方式實現 SELECT DISTINCT l1.NUM FROM LOGS l1, LOGS l2, LOGS l3 --判斷連續出現三次,因此自關聯三次 WHERE l1.Id = l2.Id - 1 ---自關聯上下級數據 AND l2.Id = l3.Id – 1 AND l1.NUM= l2.NUM AND l2.NUM= l3.NUM 2.lead/lag函數方法實現 SELECT DISTINCT NUM FROM ( SELECT ID, NUM, LAG(NUM,1) OVER(ORDER BY ID) LAG, LEAD(NUM,1) OVER(ORDER BY ID) LEAD FROM LOGS) T WHERE NUM=LAG AND NUM = LEAD --通過偏移+1/-1行數據判斷是否連續 3.通過增加輔助列方式判斷連續 分別增加需要判斷組內的自增長列以及分組增長列 核心思路:對于連續的一組數據,他的自然序列和分組排序序列的差必然相同,通過統計計算這個相同差出現的次數,可以判斷他的連續性,即同一個差值統計出現2次,則連續2次,出現3次則為連續3次
該文章在 2024/3/30 12:59:59 編輯過 |
關鍵字查詢
相關文章
正在查詢... |