2013年11月17日日曜日

[oracle12c]offsetを指定した上位n件の取得

Oracle12cの変更点のSELECT機能の強化に、下の記述がありました。
この機能を使うと、検索結果から指定した範囲のデータをねらって取得でき非常に便利だと思います。
※昔はROWNUM擬似列と副問い合わせ使って頑張って同じようなことをした記憶があります。

上位N番までの問合せの実行に、オフセットと、戻される行数または行数の割合を指定できます。

使い方

IDでソートして、11レコード目から5レコード取得する場合

開始レコード番号は、offsetに指定した値 + 1なのでoffsetには10を指定する。
select *
 from table1
order by id
offset 10 rows fetch first 5  rows only;

最後のレコードと同一のソートキーのレコードは、リミットを超えても全部取得する場合

最初のレートは異なり最後のキーワードをwith tiesにする
select *
 from table1
order by id
offset 10 rows fetch first 5  rows with ties;

注意点

ソート(order by)とセットで使わないと結果が毎回変わる可能性がある。