重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

バージョンは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を使って取得しています。

よろしくお願いいたします。

A 回答 (2件)

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でもテンポラリテーブル使えばできますね。(今気づきました
    • good
    • 0
この回答へのお礼

単純に12より小さいものをソートして2つめを得るんですね。そりゃそうですよね。
どうもありがとうございます。すっきりしました。

お礼日時:2005/01/03 17:21

サブクエリが使える4.1以降なら「12の二つ前のseqから大きいもの4つ」なんてできますが4.0だと2回にわけるしかなさそうです。

この回答への補足

12の二つ前というのはどのように求めるのでしょうか?
残念ながら今回はサブクエリは使えませんが、サブクエリを使う場合のクエリを例示していただけると非常に嬉しいです。
12の二つ前の求め方が、思いつかないもので…。

補足日時:2005/01/03 02:35
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す