アプリ版:「スタンプのみでお礼する」機能のリリースについて

テーブル=T)
KEY DATA
001 あ
002 い
003 う
004 え
005 お

SQL)
SELECT DATA FROM T WHERE KEY = 003 ;
上記のSQLでは、「う」のデータしか取得できませんが、
「003」の前後1件、合計3件の「い」「う」「え」を取得する方法を教えて下さい。
ちなみに、
SELECT DATA FROM T WHERE KEY >= 003 AND ROWNUM <= 2

SELECT * FROM ( SELECT DATA FROM T WHERE KEY < 003 ORDER BY KEY DESC ) WHERE ROWNUM < 1
のUNIONでは上手く行きませんでした。

よろしくお願いします。

A 回答 (2件)

SQLを少し直せば、質問に記載の考え方でもいいと思います。



select data from
(select data from t
where key < '003'
order by key desc)
where rownum = 1
union all
select data from
(select data from t
where key >= '003'
order by key)
where rownum <= 2;

もしくはnot existsを使って、
select data
from t a
where
key = '003'
or not exists (
select *
from t b
where (a.key < '003' and b.key < '003' and a.key < b.key)
or (a.key > '003' and b.key > '003' and a.key > b.key)
);
とかでもいいかもしれません。
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございました。いただいた回答を適用したら上手く行きました。また、EXISTS関数も勉強になりました。ありがとうございました。

お礼日時:2011/08/15 17:09

SELECT DATA FROM T WHERE KEY >= 003-1 AND KEY <= 003+1;



ではだめですか?
    • good
    • 1
この回答へのお礼

ご回答、ありがとうございました。確かに例にあげたテーブルのKEY値が、001、002…のため、ご回答のSQLでできますね。ただし、実際に適用するテーブルのKEY値は歯抜けのため、003-1の002や、003+1の004が必ず存在する訳でありませんので、003に最も近い003未満1件、003超過1件のデータを取得する方法を知りたかったので、説明不足ですみません。でも、勉強になりました。ご回答、ありがとうございました。

お礼日時:2011/08/15 17:06

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

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