• 締切済み

最後のデータを含むレコード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

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.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`) 的な処理で (チューニングを考えればもう少しありそうですが)

fukafuka19
質問者

お礼

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

関連するQ&A