あなたはこの場合、2つの疑似生成、analytic functionsを使用してテーブルの上に単一のクエリと単一パスに結合することができる:
select column1, column2, column3,
row_number() over (order by column1 desc) rn_desc,
row_number() over (order by column1 asc) rn_asc
from your_table;
を、次いで、インライン・ビュー(またはCTE)としてそのクエリを使用してフィルタリングします。
select column1, column2, column3
from (
select column1, column2, column3,
row_number() over (order by column1 desc) as rn_desc,
row_number() over (order by column1 asc) as rn_asc
from your_table
)
where rn_desc <=5
or rn_asc <= 5;
私はあなたの順序がcolumn1
上にあると仮定し、あなたはどちらかそれを含めるので、適宜変更していないように、テーブル名としてyour_table
を選びました。タイをどのように処理するかによって、rank()
またはdense_rank()
関数を代わりに使用することができます。 @ mathguyさんのコメントから
、これはよく、より良い実行する可能性があります。
select column1, column2, column3
from (
select column1, column2, column3,
row_number() over (order by column1 desc) as rn,
count(*) over() as cnt
from your_table
)
where rn <=5
or cnt - rn < 5;
ご注文はどうですか?どのOracleのバージョン。結びつきがあれば何をしたいですか? (あなたが何を注文していても、6行をランダムに表示しますか?)サンプルデータ、動作中のクエリ、および予想される結果が参考になります。 –
パフォーマンス質問には、 'EXPLAIN ANALYZE'と、テーブルサイズ、インデックス、現在の時間パフォーマンス、欲求時間などの情報が含まれている必要があります。'スロー 'は相対的な用語であり、比較のためには本当の値が必要です。 –
'ORDER BY DESC'ですか? 'ORDER BY ASC'?どういう意味ですか? – mathguy