У меня есть следующая таблица базы данных (Люди):
+--------+--------+--------+
| Name | Age | Time |
+--------+--------+--------+
| Tim | 30 | 10:10 |
| Jill | 31 | 10:20 |
| Peter | 31 | 10:30 |
| Peter | 33 | 10:40 |
| Jack | 32 | 10:50 |
| Susan | 35 | 10:60 |
| Susan | 35 | 11:70 |
+--------+--------+--------+
Теперь я хочу получить 5 имен, которые являются самыми старыми из этого списка:
Select * FROM People ORDER BY Age DESC LIMIT 5
Это даст:
| Susan | 35 | 11:70 |
| Susan | 35 | 10:60 |
| Peter | 33 | 10:40 |
| Jack | 32 | 10:50 |
| Peter | 31 | 10:30 |
Теперь это не совсем то, что я хочу. Мы видим Сьюзен там дважды, так же, как Питер. Я не хочу, чтобы повторяющиеся имена появлялись. Теперь мы видим, что 2 Сьюзен имеют оба одинакового возраста, поэтому Сьюзен с самым высоким временем (mm:ss)
должна быть отфильтрована (в данном случае: | Susan | 35 | 11:70 |
)
Для 2 Петров мы видим, что один Петр старше, поэтому в этом случае младший Петр должен быть отфильтрован (| Peter | 31 | 10:30 |
)
Так как бы выглядел этот Запрос? Сначала он должен выбрать все, затем упорядочить их по возрасту (самый старый сверху), затем отфильтровать дубликаты имен, где он должен сначала посмотреть на возраст (самый низкий фильтруется), а затем по времени (самое высокое время будет отфильтровано), а затем DESC LIMIT 5.
Таким образом, единственный правильный результат будет выглядеть так:
| Susan | 35 | 10:60 |
| Peter | 33 | 10:40 |
| Jack | 32 | 10:50 |
| Jill | 31 | 10:20 |
| Peter | 31 | 10:30 |