欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

SQL常用算法-判斷數據是否連續

admin
2024年3月30日 12:59 本文熱度 654

常見場景

     經常會遇到一些分析連續次數類的需求,會需要對數據判斷是否連續,比如“用戶是否連續登入" ,“最多連續點擊次數”等等。

     對于連續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次

SELECT DISTINCT Num FROM (  SELECT NUM,         COUNT(1as SerialCount   FROM     (SELECT Id,Num,      row_number() over(order by id) -      ROW_NUMBER() over(partition by Num order by Id) as SerialNumberSubGroup     FROM       LOGS     ) as SubGROUP BY Num,SerialNumberSubGroup HAVING COUNT(1) >= 3) as Result --判斷出現的次數統計


該文章在 2024/3/30 12:59:59 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved