- 締切済み
特定のレコード(ここの例ではseqが12)の前後2件のレコード取得方法
バージョンはMySQL4.0.21で、RedHat Linux 9上で動かしています。 やりたい事は以下のようなことです。 以下のようなテーブル(sample)があった場合 seq | memo ----+--------------------------- 1 | 暇なときに回答ください 2 | 困ってます 5 | 直ぐに回答ほしいです 9 | このカテゴリーの質問総登録件数 12 | 新しい回答がきたらメールで知らせてほしい 14 | みんなの疑問、みんなで解決! 18 | 掲載情報の著作権は提供元企業等に帰属します 59 | 質問する 中止する seqが12のレコードの前後2件が取得したいのです。 期待する結果は以下のようなものです。 5 | 直ぐに回答ほしいです 9 | このカテゴリーの質問総登録件数 12 | 新しい回答がきたらメールで知らせてほしい 14 | みんなの疑問、みんなで解決! 18 | 掲載情報の著作権は提供元企業等に帰属します seqに重複はありませんが、連続しているわけではなく、存在しない番号もあります。 このようなときに1度のクエリで期待する情報を取得できないものでしょうか? 現在は12より小さいものを2件、12より大きいものを2件LIMITを使って取得しています。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Ethersky
- ベストアンサー率71% (168/235)
SELECT seq FROM sample WHERE seq >= ( SELECT seq FROM sample WHERE seq < 12 ORDER BY seq DESC LIMIT 1 , 1 ) ORDER BY seq ASC LIMIT 0 , 5 動作確認はしてませんがこんな感じになるでしょう。 SELECT seq FROM sample WHERE seq < 12 ORDER BY seq DESC LIMIT 1 , 1 ↑が12の二つ前のseqを取得するところです。 #4.0でもテンポラリテーブル使えばできますね。(今気づきました
- Ethersky
- ベストアンサー率71% (168/235)
サブクエリが使える4.1以降なら「12の二つ前のseqから大きいもの4つ」なんてできますが4.0だと2回にわけるしかなさそうです。
補足
12の二つ前というのはどのように求めるのでしょうか? 残念ながら今回はサブクエリは使えませんが、サブクエリを使う場合のクエリを例示していただけると非常に嬉しいです。 12の二つ前の求め方が、思いつかないもので…。
お礼
単純に12より小さいものをソートして2つめを得るんですね。そりゃそうですよね。 どうもありがとうございます。すっきりしました。