Я пытаюсь выбрать топ 2 записей из результата таблицы базы данных, которая выглядит как этотвыбрать верхнюю п запись из каждой группы SQLite
SubjectId | StudentId | Levelid | total
------------------------------------------
1 | 1 | 1 | 89
1 | 2 | 1 | 77
1 | 3 | 1 | 61
2 | 4 | 1 | 60
2 | 5 | 1 | 55
2 | 6 | 1 | 45
я попробовал этот запрос
SELECT rv.subjectid,
rv.total,
rv.Studentid,
rv.levelid
FROM ResultView rv
LEFT JOIN ResultView rv2
ON (rv.subjectid = rv2.subjectid
AND
rv.total <= rv2.total)
GROUP BY rv.subjectid,
rv.total,
rv.Studentid
HAVING COUNT(*) <= 2
order by rv.subjectid desc
, но некоторые предметы, как где не хватает, я даже попробовал suggestiong FRM следующей ссылке
How to select the first N rows of each group?
но я получаю больше, чем два для каждого субъекта
что я делаю неправильно?
'HAVING COUNT (*) <= 3' отфильтровывает любую группу с 3 или более строками. Но вы не хотите исключать целые группы, только любые строки за второй. – Andomar
'HAVING COUNT (*) <= 3' был опечаткой, он был исправлен – Smith
Если вы представляете пример желаемого вывода, проще дать ответ. – Johanneke