MySQLデータベースでは、グループ化後の各グループの最後のレコードをどのようにクエリーしますか?

937 ワード

問題の説明
たとえば、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
MySQLパケットクエリ文が実行された場合、次のようになります.
select * from messages group by name
nameでグループ化された最初のデータは、次のようにすべて返されます.
1    A       A_data_1
4    B       B_data_1
6    C       C_data_1

では、nameでグループ化された後、各グループの最後のデータを返すMySQL文をどのようにクエリーしますか.
3    A       A_data_3
5    B       B_data_2
6    C       C_data_1

 
ソリューションMySQLIN(...)句を使用して、次のようにします.
SELECT id, name, other_columns
FROM messages
WHERE id IN (
    SELECT MAX(id)
    FROM messages
    GROUP BY name
);