• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:sqlのwhereで指定した条件の前後を取得したい)

SQLのWHEREで指定した条件の前後を取得する方法

このQ&Aのポイント
  • SQLのWHEREで指定した条件の前後のデータを取得する方法について教えてください。
  • テーブルTのキーが003の前後1件ずつ、合計3件のデータを取得する方法を教えてください。
  • SELECT文とUNIONを使用してもうまくいかなかった場合、どのように書けばよいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.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) ); とかでもいいかもしれません。

yayaman6437
質問者

お礼

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

その他の回答 (1)

回答No.1

SELECT DATA FROM T WHERE KEY >= 003-1 AND KEY <= 003+1; ではだめですか?

yayaman6437
質問者

お礼

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