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

特定のデータの前後を取得したい

このQ&Aのポイント
  • 特定のデータの前後のデータを取得する方法について教えてください。
  • SELECT文を使用してデータベースから特定のデータを取得し、そのデータの前後のデータを取得する方法について知りたいです。
  • データベースのテーブルから特定のデータの前後のデータを取得するためには、どのようなSQL文を使用すれば良いでしょうか?

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

  • ベストアンサー
回答No.1

1、ID=72のregist_dateより<=の最初を取得する。 2、ID=72のregist_dateより>=の最初を取得する。 もちろん、ID=72は除外。と、2度SQL文を実行したらいけるのでは?添付図は、この考えでID=95のレコードを取得しています。

honoka69
質問者

お礼

ありがとうございます。

その他の回答 (2)

  • tk2017
  • ベストアンサー率0% (0/1)
回答No.3

こんな感じでしょうか。 1. 連番変数設定 mysql> set @i=0; 2. 目的のカラム設定 mysql> set @t=72 3. 検索 mysql> select * from (select @i := @i+1 i, id,created_at from girls) a where i in (@t-1, @t, @t+1) ; +------+-----+------------+ | i | id | regist_date) +------+-----+------------+ | 249 | 95 | 2017-03-29 | | 250 | 72 | 2017-03-28 | | 251 | 15 | 2017-03-28 | +------+-----+------------+

honoka69
質問者

お礼

うまく値が取得できませんでしたが参考にさせてもらいます。 ありがとうございます。

回答No.2

【訂正】 UNION 句を使えば一度でOKでした。そういうことで前回答を訂正します。 SELECT TOP 1 Test.ID, Test.regist_date, Test_1.ID, Test_1.regist_date FROM Test, Test AS Test_1 WHERE (((Test.ID)<>Test_1.ID) And ((Test.regist_date)>=Test_1.regist_date) And ((Test_1.ID)=72)) UNION SELECT TOP 1 Test.ID, Test.regist_date, Test_1.ID, Test_1.regist_date FROM Test, Test AS Test_1 WHERE (((Test.ID)=Test_1.ID) And ((Test.regist_date)>=Test_1.regist_date) And ((Test_1.ID)=72)) UNION SELECT TOP 1 Test.ID, Test.regist_date, Test_1.ID, Test_1.regist_date FROM Test, Test AS Test_1 WHERE (((Test.ID)<>Test_1.ID) And ((Test.regist_date)<=Test_1.regist_date) And ((Test_1.ID)=72)); MySQLの実行環境がありませんのでAccessでテストしています。確か、Top句の書き方は違ったとおもいますが、考え方は一緒です。なお、95,72,15の順になっていないのはUNION結合の順番がどうのこうのでテストしたからです。その辺りは修正されてください。

honoka69
質問者

お礼

ソースまで付けて試していただきありがとうございます。 考え方を理解してチャレンジしてみます!

関連するQ&A