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

締切り済みの質問

最後のデータを含むレコード1行 MYSQL

お世話になります。
最後の日にちを含むレコード全ての抽出方法がどうしてもわかりません。
id name date amount
1 AA 3/1 5
2 BB 3/1 5
3 CC 3/1 5
4 AA 3/2 7
5 BB 3/2 4
6 AA 3/3 1

これを、select * from テーブル group by name とすると、
id name date amount
1 AA 3/1 5
2 BB 3/1 5
3 CC 3/1 5

select id, name, max(date),amount from テーブル group by name
とすると、
id name date amount
1 AA 3/3 5
2 BB 3/2 5
3 CC 3/1 5

望んでいる結果はこうです。最後のdateを含むレコード全てです。
id name date amount
3 CC 3/1 5
5 BB 3/2 4
6 AA 3/3 1

select * from テーブル as a
where a.date=(select max(b.date)
From テーブル as b
where a.id=b.id);

このようにしましたが、データの数が膨大なのですごく時間がかかってしまいます。
他、シンプルな方法はないでしょうか。
よろしくお願いします。
MYSQL バージョン5.0.45

投稿日時 - 2010-03-30 18:17:36

QNo.5790551

困ってます

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

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

回答(1)

ANo.1

適宜インデックスが貼ってあるとして

select * from テーブル
where (`name`,`date`) in
(select `name`,max(`date`) from テーブル group by `name`)

とするか

select hoge.id,hoge.name,hoge.dateA,hoge.amount
from テーブル AS hoge
inner join (
select name,max(`date`) as `date` from hoge group by `name`
) as sub using(`name`,`date`)

的な処理で
(チューニングを考えればもう少しありそうですが)

投稿日時 - 2010-03-30 18:49:42

お礼

ありがとうございました。気にならないくらい早まりました。
大変助かりました。

投稿日時 - 2010-03-30 19:01:30

あなたにオススメの質問