Я думаю, вам нужны десять учеников с каждой датой рождения. Это самый большой запрос для каждой группы, и вы можете выполнить поиск переполнения стека , чтобы увидеть, как это можно сделать в MySQL.
Было бы легко, если бы MySQL поддерживал функцию ROW_NUMBER, но, поскольку она не поддерживает ее, вы можете эмулировать ее с помощью переменных. Например, чтобы получить 3 ученика на каждую дату рождения, вы можете сделать это так:
SELECT
student_id,
year_of_birth
FROM (
SELECT
year_of_birth,
student_id,
@rn := CASE WHEN @prev_year_of_birth = year_of_birth
THEN @rn + 1
ELSE 1
END AS rn,
@prev_year_of_birth := year_of_birth
FROM (SELECT @prev_year_of_birth := NULL) vars, students T1
ORDER BY year_of_birth, student_id DESC
) T2
WHERE rn <= 3
ORDER BY year_of_birth, student_id
Результат:
1, 1990
2, 1990
5, 1990
4, 1991
7, 1991
8, 1991
6, 1992
Данные испытаний:
CREATE TABLE students (student_id INT NOT NULL, year_of_birth INT NOT NULL);
INSERT INTO students (student_id, year_of_birth) VALUES
(1, 1990),
(2, 1990),
(3, 1991),
(4, 1991),
(5, 1990),
(6, 1992),
(7, 1991),
(8, 1991);