SQLite 上端から指定した件数を取得するための下端を求める
SQLiteで不連続の数字の中から30を上端に5個の数字を取得するための下端を求めるSQLを書いてみました。例えば(1,3,5,6,7,8,10,12,20,23,24,25,28,30,31,40)と数字が並んでいた場合、(23,24,25,28,30)がこれを満たすので、下端としては23が該当します。
SELECT MIN(該当範囲) AS 下端 FROM ( SELECT 不連続ID AS 該当範囲 FROM 検索対象 WHERE 不連続ID ORDER BY 不連続ID DESC LIMIT 5 )
サブクエリで求めたい範囲を全件取得しています。WHERE句で30以下という上限の指定を、ORDER BY で不連続IDの降順に並べることで30を上限とする大きい順リストを、LIMIT 5 を指定することで大きい順に5個取得することを指定しています。
このサブクエリの結果得られた該当範囲の最小(MIN)を取ってやれば、求めたい範囲の下端が得られるというわけです。