重要なお知らせ

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

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

SELECT * FROM hoge WHERE hoge LIKE '%$okweb%' ORDER BY day DESC; と、ほしい情報が入っているレコードを取得した場合、セレクトした一番最後のレコードの次を取得するにはどうしたらいいのでしょうか?又は一番初めの一つ前のレコードを取得するにはどうしたらいいのでしょうか?

よろしくお願いします。

A 回答 (3件)

#1回答者です。



MySQLはバージョンアップが盛んに行われているので、
質問する場合は、バージョンを明記しましょう。
具体的なSQL例を回答してもらっても、バージョンの違いで実行できないということも珍しくありません。

以下のSQL例は、副問い合わせ(サブクエリ)を使用しているため、バージョン4.1以降でないと実行できないかも知れません。

●前の日付を得る
select max(hoge_date)
from hoge_table
where `day`<(select min(`day`)
from hoge_table
where hoge_date like '%2006/3/20%');

●次の日付を得る
select min(hoge_date)
from hoge_table
where `day`>(select max(`day`)
from hoge_table
where hoge_date like '%2006/3/20%');
    • good
    • 0

テンポラリをつかってこんな感じでいけませんか?


ただしdayに連続性がないとだめですけど。
hogeはdate型にしない理由はなにかあるのでしょうか?

CREATE TEMPORARY TABLE `MIN-1` SELECT MIN(`day`)-1 AS `LESSMIN` FROM `hogetable` WHERE `hoge` LIKE '%2005/1/4%' ;
CREATE TEMPORARY TABLE `MAX+1` SELECT MAX(`day`)+1 AS `MOREMAX` FROM `hogetable` WHERE `hoge` LIKE '%2005/1/4%' ;
SELECT `hogetable`.* FROM `hogetable`,`MIN-1`,`MAX+1` WHERE `day` BETWEEN `LESSMIN` AND `MOREMAX` ORDER BY `day`;
    • good
    • 0

>「一番最後のレコードの次」


>「一番初めの一つ前のレコード」

どういう順序での、「次」や「前」なのでしょうか?

(1)列dayでソートしているので、前後の日付という意味?
(2)列hogeでLIKE検索しているので、その検索範囲外の近い値という意味?
(3)表hogeにユニークなキーがあり、検索対象になったレコードのキー値の前後のレコードということ?

この回答への補足

すいませんでした。

意味は 1 です。

日ごとにレコードがあり、初めのレコードほど古く、最後尾がもっとも最新な情報となります。ややこしくて申し訳ないのですが、dayには日付が格納されているのではなく、auto_incrementでつけた数字が入っています。日付は hoge に 2005/3/20 な感じで入っています。つまり、 2005/1/4 にちの日に登録されたレコードをすべて取得した後、その一つ前1レコードと一つ後1レコードのみを取得したいと思っています。つまり、1/4以降と以前に登録された日を割り出すため、このようにややこしくなってしまいました。

よろしくお願いします。

補足日時:2006/03/20 17:51
    • good
    • 0

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