お世話になります。
ID:1
ID:3
ID:8
というIDに規則性のないデータが3つあったとします。
SELECT id FROM `sample` WHERE id = 8 ORDER BY id DESC LIMIT 1
でID=8を得たとき、一行のSQLでその一つ前のデータ(ID=3)も取得することは可能でしょうか?
それとももう一度SQLを書くしかないでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答6件
0
ID=8の一つ前のデータのみ取得するなら、
SQL
1SELECT * FROM sample 2WHERE id < 8 3order by id desc limit 1
ID=8と一つ前のデータを取得するなら、
SQL
1SELECT * FROM sample 2WHERE id <= 8 3order by id desc limit 2
投稿2018/07/30 02:59
編集2018/07/30 03:02総合スコア25426
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
SQL
1WHERE id = 8
の段階でその他のデータは取得できていませんので、
一つ前という概念自体ありません。
改めてSQLを発行する以外ありません。
投稿2018/07/30 02:30
総合スコア3191
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/30 03:14
2018/07/30 04:02
2018/07/30 07:05
2018/07/30 07:09 編集
2018/07/30 07:22
2018/07/31 01:02 編集

0
mysql なら カーソルの利用を検討してみてはいかがでしょう。
- MySQL 操作をひと通りマスター!導入方法とCRUDサンプルコード集
https://it-engineer-lab.com/archives/1181
- 「カーソル」を理解する
http://www.atmarkit.co.jp/ait/articles/1703/01/news193.html
- MySQL ResultSetのStreamingとCursorの違い
投稿2018/07/30 21:49
総合スコア22328
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
もしかして、「現時点で最大の ID より小さい中で最大の ID を持つレコード」も欲しいのでしょうか?
だとすると
SELECT * FROM sample WHERE id <= (SELECT MAX(id) FROM sample) ORDER BY id DESC LIMIT 2;
これでよい?
投稿2018/07/30 04:52
編集2018/07/30 04:54総合スコア13707
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
order by id desc limit 1 してるなら id=8 じゃなく単に id<8 にすれば良いのでは?(今回の事例で3が欲しいならですがもし8と3が欲しいというなら id<=8 にして limit 2 にするというのでどうでしょうか)
投稿2018/07/30 02:31
編集2018/07/30 02:33総合スコア2160
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

退会済みユーザー
2018/07/30 02:33

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。