重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

SQL初心者です。

以下のようなテーブルがある時に、

--------
X Y Z
--------
1 c E
2 a C
3 d B
4 b A
5 e D
--------

「Xが3のレコードの、Zで昇順ソートした時の前後のレコードを取得する」

ということをしたいのですが、見当もつかずに困っています。
どんな些細なことでもよいので、何かご存知の方がいたら、アドバイス願えないでしょうか。

よろしくお願いします、

A 回答 (1件)

Oracle8i以降でよければ順位関数と複文を使って



Select table1.x,table1.y,table1.z
from
(Select rank() over (order by z) rank,x,y,z from XYZ) table1, --順位付けしたテーブル
(Select rank from (Select rank() over (order by z) rank,x,y,z from XYZ) where x = 3) table2
--X=3のデータの順位
where table1.rank = table2.rank -1 --X=3の前
or table1.rank = table2.rank +1 --X=3の後;

で出ますね。

順位付きのレコードの検索が重複しているから、
Viewを使えばもう少しすっきりすると思います。

Oracle以外では、順位の求め方や、複文が使えるかどうかなど条件が変わってきます。

上記ので解決できなければ、
使っているデータベースの名前やバージョンなどの情報を追加していただけたら、解決に結びつく回答が得られると思います。

この回答への補足

さっそくの回答ありがとうございます。
勉強になります。

DBは以下です。
 PostgreSQL Ver7.3.4

PostgreSQLでも同じことが実現可能でしょうか?

補足日時:2005/09/02 15:05
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す