Я нашел вопрос, который был очень похож на этот, но с использованием функций, которые кажутся исключительно Oracle. Я ищу это в SQL Server.
У меня есть такая таблица:
MyTable
--------------------
MyTableID INT PK
UserID INT
Counter INT
Каждый пользователь может иметь несколько строк, с различными значениями для Counter
в каждой строке. Мне нужно найти строки с самым высоким значением Counter
для каждого пользователя.
Как я могу сделать это в SQL Server 2005?
Лучшее, что я могу придумать, - это запрос, который возвращает MAX(Counter)
для каждого UserID
, но мне нужна вся строка, потому что другие данные в этой таблице не показаны в моем определении таблицы для простоты.
РЕДАКТИРОВАТЬ: Из некоторых ответов в этом посте мне стало известно, что я забыл важную деталь. Можно иметь 2+ строки, в которых идентификатор пользователя может иметь одинаковое значение счетчика MAX. Пример ниже обновлен для того, чтобы быть ожидаемыми данными / выводом.
С этими данными:
MyTableID UserID Counter
--------- ------- --------
1 1 4
2 1 7
3 4 3
4 11 9
5 11 3
6 4 6
...
9 11 9
Я хочу, чтобы эти результаты были получены для дублированных значений MAX, выберите первое вхождение в любом порядке, в котором их выбирает SQL-сервер. Какие строки возвращаются, не важно в этом случае, если пары UserID / Counter различны:
MyTableID UserID Counter
--------- ------- --------
2 1 7
4 11 9
6 4 6