業務上偶爾需要取得倒數第二筆記錄,以下提供三種 SQL 寫法供參考,適用於不同場景與資料量。
SELECT * FROM holder_change_histories WHERE treasure_id = ? ORDER BY id DESC LIMIT 1, 1;
LIMIT 1, 1 表示跳過第 1 筆(倒數第 1),取第 2 筆(倒數第 2)。此寫法利用索引排序,效能極佳。
SELECT *
FROM tablename a
WHERE (SELECT COUNT(*)
FROM tablename b
WHERE a.id < b.id) = 1;
邏輯:找出「比自己大的 id 只有 1 筆」的記錄,即為倒數第二筆。適合不支援 LIMIT offset, count 語法的資料庫,但大資料量下效能較差。
SELECT * FROM tb1 ORDER BY tb1.id DESC LIMIT 1, 1;
同方法一,適用於無額外篩選條件的簡單查詢。
id 或排序欄位有索引。