- ベストアンサー
特定のデータの前後を取得したい
- 特定のデータの前後のデータを取得する方法について教えてください。
- SELECT文を使用してデータベースから特定のデータを取得し、そのデータの前後のデータを取得する方法について知りたいです。
- データベースのテーブルから特定のデータの前後のデータを取得するためには、どのようなSQL文を使用すれば良いでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (2)
- tk2017
- ベストアンサー率0% (0/1)
こんな感じでしょうか。 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 | +------+-----+------------+
お礼
うまく値が取得できませんでしたが参考にさせてもらいます。 ありがとうございます。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
【訂正】 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結合の順番がどうのこうのでテストしたからです。その辺りは修正されてください。
お礼
ソースまで付けて試していただきありがとうございます。 考え方を理解してチャレンジしてみます!
お礼
ありがとうございます。