Oracle-11g

選擇不存在較小行的行

  • April 30, 2016

考慮下表數據:

ID NAME
1 Kshitiz 
2 Aman
5 Aakash
6 Manjeet

這裡缺少 2 到 5 之間的記錄。我可以使用什麼查詢來選擇此表中的第 5 行?

Oracle 支持LAG,所以你應該能夠做類似的事情。

SELECT T.ID, 
      T.NAME
FROM
(
SELECT ID, 
      NAME,
      LAG(ID) OVER (ORDER BY ID) AS PREVID
FROM YourTable
) T
WHERE ID > PREVID + 1;

將 Id 與前一個 Id 進行比較,僅返回間隙大於 1 的 Id。

(未經測試,因為當我嘗試創建 Oracle Fiddle 時,SQL Fiddle 目前正在返回錯誤)

SELECT 
 p2.ID,
 p2.NAME
FROM person p1
 INNER JOIN person p2 ON p1.ID = p2.ID+1
WHERE p1.ID <> p2.ID 
 AND p2.ID <> 1

您可以自行加入表格ID = ID+1

僅當AND p2.ID <> 11 是 ID 列中的最小值時才應存在。

SQLfiddle 範例

引用自:https://dba.stackexchange.com/questions/137038