こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

特定のレコード(ここの例では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を使って取得しています。

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

投稿日時 - 2005-01-03 01:41:04

QNo.1150472

暇なときに回答ください

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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でもテンポラリテーブル使えばできますね。(今気づきました

投稿日時 - 2005-01-03 17:08:32

お礼

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

投稿日時 - 2005-01-03 17:21:34

ANo.1

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

投稿日時 - 2005-01-03 01:50:30

補足

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

投稿日時 - 2005-01-03 02:35:32

あなたにオススメの質問