Нижче наведено найпростіший можливий приклад, хоча будь-яке рішення повинно бути здатне масштабувати до того, як потрібно багато n найкращих результатів:
Враховуючи таблицю, описану нижче, зі стовпцями людей, групи та віку, як би ви отримали 2 найстаріших людей у кожній групі? (Зв'язки всередині груп не повинні давати більше результатів, але дають перші 2 в алфавітному порядку)
+ -------- + ------- + ----- + | Особа | Група | Вік | + -------- + ------- + ----- + | Боб | 1 | 32 | | Джилл | 1 | 34 | | Шон | 1 | 42 | | Джейк | 2 | 29 | | Пол | 2 | 36 | | Лора | 2 | 39 | + -------- + ------- + ----- +
Бажаний набір результатів:
+ -------- + ------- + ----- + | Шон | 1 | 42 | | Джилл | 1 | 34 | | Лора | 2 | 39 | | Пол | 2 | 36 | + -------- + ------- + ----- +
ПРИМІТКА. Це запитання ґрунтується на попередньому. Отримайте записи з максимальним значенням для кожної групи згрупованих результатів SQL - для отримання по одному верхньому рядку від кожної групи, і на який отримали чудову відповідь для MySQL від @Bohemian:
select *
from (select * from mytable order by `Group`, Age desc, Person) x
group by `Group`
Дуже хотілося б, щоб можна було це наростити, хоча я не бачу як.