Я использую mysql 5.7 сервер и у меня есть следующая таблица с id
в качестве ПЕРВИЧНОГО КЛЮЧА.
Моя таблица
mysql> select * from abc;
+----+---------+-------+
| id | name | place |
+----+---------+-------+
| 1 | asd1 | abcd1 |
| 2 | asd2 | abcd1 |
| 3 | asd1 | abcd2 |
| 4 | asd3 | abcd1 |
| 5 | asd4 | abcd1 |
| 6 | asd1 | abcd1 |
| 7 | asd2 | abcd2 |
| 8 | asd3 | abcd2 |
| 9 | asd4 | abcd2 |
| 10 | asd3 | abcd1 |
| 11 | asd4 | abcd1 |
| 12 | asd4 | abcd2 |
| 13 | asd1 | abcd2 |
+----+---------+-------+
13 rows in set (0.00 sec)
Ожидаемый результат
Я хочу выбрать строки с уникальным name
, имеющие самые последние id
.
Другими словами, мой ожидаемый результат должен быть следующим:
+----+---------+-------+
| id | name | place |
+----+---------+-------+
| 13 | asd1 | abcd2 |
| 7 | asd2 | abcd2 |
| 10 | asd3 | abcd1 |
| 12 | asd4 | abcd2 |
+----+---------+-------+
4 rows in set (0.00 sec)
То, что я пытался
mysql> select * from abc group by name order by id desc;
+----+------+-------+
| id | name | place |
+----+------+-------+
| 5 | asd4 | abcd1 |
| 4 | asd3 | abcd1 |
| 2 | asd2 | abcd1 |
| 1 | asd1 | abcd1 |
+----+------+-------+
4 rows in set (0.00 sec)
mysql> select * from (select * from abc as t order by t.id desc) as st1 group by t1.orderID;
+----+------+-------+
| id | name | place |
+----+------+-------+
| 1 | asd1 | abcd1 |
| 2 | asd2 | abcd1 |
| 4 | asd3 | abcd1 |
| 5 | asd4 | abcd1 |
+----+------+-------+
4 rows in set (0.00 sec)
mysql> select * from abc l inner join (select * from abc group by name) r on l.id = r.id;
+----+------+-------+----+------+-------+
| id | name | place | id | name | place |
+----+------+-------+----+------+-------+
| 1 | asd1 | abcd1 | 1 | asd1 | abcd1 |
| 2 | asd2 | abcd1 | 2 | asd2 | abcd1 |
| 4 | asd3 | abcd1 | 4 | asd3 | abcd1 |
| 5 | asd4 | abcd1 | 5 | asd4 | abcd1 |
+----+------+-------+----+------+-------+
4 rows in set (0.01 sec)
Вопрос
Что будет правильным SQL, чтобы получить Ожидаемый результат ? Точный и простой будет предпочтительным.