首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 查詢倒數第二筆記錄的三種實作方法

     編輯:MySQL 資料庫相關知識

業務上偶爾需要取得倒數第二筆記錄,以下提供三種 SQL 寫法供參考,適用於不同場景與資料量。

方法一:LIMIT 偏移量寫法(最常用、效能最佳)

SELECT * 
FROM holder_change_histories 
WHERE treasure_id = ? 
ORDER BY id DESC 
LIMIT 1, 1;

LIMIT 1, 1 表示跳過第 1 筆(倒數第 1),取第 2 筆(倒數第 2)。此寫法利用索引排序,效能極佳。

方法二:子查詢計數法(不依賴 LIMIT 的資料庫相容寫法)

SELECT * 
FROM tablename a 
WHERE (SELECT COUNT(*) 
       FROM tablename b 
       WHERE a.id < b.id) = 1;

邏輯:找出「比自己大的 id 只有 1 筆」的記錄,即為倒數第二筆。適合不支援 LIMIT offset, count 語法的資料庫,但大資料量下效能較差。

方法三:簡易 LIMIT 寫法(無 WHERE 條件時)

SELECT * 
FROM tb1 
ORDER BY tb1.id DESC 
LIMIT 1, 1;

同方法一,適用於無額外篩選條件的簡單查詢。

效能建議

  • 優先使用 方法一,確保 id 或排序欄位有索引。
  • 大資料量避免使用方法二的相關子查詢,會導致全表掃描。
  • 若頻繁查詢「倒數第 N 筆」,可考慮維護一個反向排序的覆蓋索引。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved