- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:sqlのwhereで指定した条件の前後を取得したい)
SQLのWHEREで指定した条件の前後を取得する方法
このQ&Aのポイント
- SQLのWHEREで指定した条件の前後のデータを取得する方法について教えてください。
- テーブルTのキーが003の前後1件ずつ、合計3件のデータを取得する方法を教えてください。
- SELECT文とUNIONを使用してもうまくいかなかった場合、どのように書けばよいでしょうか?
- みんなの回答 (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) ); とかでもいいかもしれません。
その他の回答 (1)
- 沙羅 聖児(@sara_seiji)
- ベストアンサー率25% (25/98)
回答No.1
SELECT DATA FROM T WHERE KEY >= 003-1 AND KEY <= 003+1; ではだめですか?
質問者
お礼
ご回答、ありがとうございました。確かに例にあげたテーブルのKEY値が、001、002…のため、ご回答のSQLでできますね。ただし、実際に適用するテーブルのKEY値は歯抜けのため、003-1の002や、003+1の004が必ず存在する訳でありませんので、003に最も近い003未満1件、003超過1件のデータを取得する方法を知りたかったので、説明不足ですみません。でも、勉強になりました。ご回答、ありがとうございました。
お礼
ご回答、ありがとうございました。いただいた回答を適用したら上手く行きました。また、EXISTS関数も勉強になりました。ありがとうございました。