Есть таблица 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
Но это выглядит крайне неэффективно. Есть ли другие способы достижения того же результата?