- - PR -
下位5件のデータを上位から取得するには
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-02-24 22:49
oracleでソートしたデータを上位5件だけ取得するには
rownum<=5のようにすれば可能だと思いますが、 このソート順のままで下位5件のみ取得することを 1個のSQLで実現するにはどうすればいいのでしょうか? 期待する結果としては、 16位 17位 18位 19位 20位 のような結果を期待しています。 何かよいアイデアがありましたら、ご教授ください。 よろしくお願いいたします。 | ||||||||
|
投稿日時: 2005-02-24 23:19
逆順にソートして上位5件を取得してから、望みの順番にソートし直せばいいのではないでしょうか? [ メッセージ編集済み 編集者: 永井和彦 編集日時 2005-02-24 23:20 ] | ||||||||
|
投稿日時: 2005-03-03 01:09
解決しましたか?
select t.order, t.name from ( select rownum as rank, order, name from ranking where rownum<=5 order by order desc) t order by t.order | ||||||||
|
投稿日時: 2005-03-03 09:37
はにまるです。
これは、半分正しく無いのでは? (※1)は、(※2)より優先的に処理される為、 提示されてSQL文は、 1.Oracleが無作為に取得した先頭5件を 2.「order」降順で並び替え、 3.その結果を「order」昇順で並び替える 処理になると思います。 但し、「order」項目がIndexとして設定されていると、 Oracleはデータ無作為に取得するのでは無く、 Indexを参照しながらデータを取得する為に、 k.oさんのSQL文でも意図した動きになります。 Indexが張られていない場合は、下記の通りかと。
また、rownum仮想項目で順位取得をする場合は、 私が提示した様に、全レコードを取得してから データ加工を行う必要があります。 # 追記 私が提示したのは、k.oさんのSQL文から rownum <= 5 の条件判断位置を変えただけ。 _________________ OFF企画中ご意見募集 [ メッセージ編集済み 編集者: はにまる 編集日時 2005-03-03 09:41 ] | ||||||||
|
投稿日時: 2005-03-03 22:16
おかげさまで解決いたしました。
欲しいデータを取得して、それを再度ソートしなおすということですよね。 ちょっと難しく考えすぎたのかもしれません。 みなさま、どうもありがとうございました。 | ||||||||
|
投稿日時: 2006-09-22 15:42
上位五件はビリからの上位五件
と考える | ||||||||
|
投稿日時: 2006-09-22 16:33
offset, limit ?
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/psql_k09.htm ・最後から 3 件問い合わせるには、ソートオーダを逆にすれば良い。 select * from testm order by key desc offset 0 limit 3 ; key | data1 | data2 | data3 ----------+-------+-------+------- c003 | 100 | 200 | 300 b002 | 10 | 20 | 30 a011 | 1 | 2 | 3 | ||||||||
|
投稿日時: 2006-09-25 12:30
Oracleにoffset,limit句は無いと思うのですが・・・。
|
1