Я видел, как этот вопрос задавался пару раз, и я написал свой собственный запрос, но он довольно медленный, и я был бы чрезвычайно признателен, если бы кто-то мог дать совет о том, как его ускорить.
В упрощенном сценарии у меня есть следующие две таблицы:
* Группа 1005 *
- GroupID (первичный ключ)
Участник
- MemberID (первичный ключ)
- GroupID (внешний ключ)
Допустим, для каждого GroupID в группе я хочу найти 2 верхних значения MemberID от Member, которые имеют этот GroupID.
Вот мой текущий запрос, который работает, но мучительно медленно:
SELECT M.MemberID, M.GroupID
FROM Member AS M
WHERE M.MemberID in
(Select top 2 Member.MemberID
FROM Member
Where Member.GroupID = M.GroupID
ORDER BY Member.MemberID)
Say Group имеет следующие строки
GroupID
1
2
3
и член имеет следующие строки
MemberID, GroupID
1, 1
2, 2
3, 3
4, 1
5,2
6, 3
7, 1
8,2
9, 3
Тогда мой запрос должен вернуть:
MemberID GroupID
1, 1
2, 2
3, 3
4, 1
5,2
6, 3