- 締切済み
前後のレコードを取得する
SQL初心者です。 以下のようなテーブルがある時に、 -------- X Y Z -------- 1 c E 2 a C 3 d B 4 b A 5 e D -------- 「Xが3のレコードの、Zで昇順ソートした時の前後のレコードを取得する」 ということをしたいのですが、見当もつかずに困っています。 どんな些細なことでもよいので、何かご存知の方がいたら、アドバイス願えないでしょうか。 よろしくお願いします、
- みんなの回答 (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でも同じことが実現可能でしょうか?