首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

巧解 T-SQL 查詢連續號碼段:ROW_NUMBER 差值分組法

     編輯:關於SqlServer

需求:表含 fphm (發票號碼)、kshm (起始號碼),第二欄可能連續、可能斷點。要查出每個連續區間的起止號。

核心技巧

利用 ROW_NUMBER() 生成遞增序號,連續號碼段中「號碼值 - 序號」保持常數。按此常數分組,取 MIN/MAX 即得區間。

標準 SQL 寫法 (Oracle 範例易改 SQL Server)

SELECT fphm, MIN(kshm) AS start_hm, MAX(kshm) AS end_hm
FROM (
  SELECT fphm, kshm,
         ROW_NUMBER() OVER (PARTITION BY fphm ORDER BY kshm) AS rn
  FROM t
) a
GROUP BY fphm, (kshm - rn);

結果:
2014, 00000001, 00000005
2014, 00000007, 00000009
2013, 00000120, 00000122
2013, 00000124, 00000125

單掃描、無游標、無自聯結,極其高效優雅。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved