質問: 各グループの最後のレコードを取得する - mysql 以下に示すようなデータを含むテーブルmessagesがあります。id name other_columns ------------------------- 1 a a_data_1 2 a a_data_2 3 a a_data_3 4 b b_data_1 5 b b_data_2 6 c c_data_1 select * from messages group by nameクエリを実行すると、結果は次のようになります。1 a a_data_1 4 b b_data_1 6 c c_data_1 どのようなクエリが次の結果を返しますか?3 a a_data_3 5 b b_data_2 6 c c_data_1 つまり、各グループの最後のレコードが返されるはずです。現在のところ、これは私が使用しているクエリです:select * from (select * from messages order by id desc) as x group by name しかし、これは非常に非効率的に見えます。同じ結果を達成するための他の方法はありますか?
回答: それぞれのグループ内の最後の投稿のidを取得し、最初のクエリの結果をwhere x inコンストラクトの引数として使用して、messagesテーブルから選択するという別の解決策を見つけました。select id, name, other_columns from messages where id in ( select max(id) from messages group by name ); 私がこれが他のソリューションのいくつかと比較してどのように機能するかはわかりませんが、300万行以上の私のテーブルでは壮観に機能しました。 (1200+の結果で4秒間の実行) これはmysqlとsql serverの両方で動作するはずです。