Sql 按另一个字段最大值分组值

Sql 按另一个字段最大值分组值,sql,sql-server,sql-server-2008,select,Sql,Sql Server,Sql Server 2008,Select,我有下表 ID | Name | Salary ---+------+------- 1 |Tom | 100 2 |Tom | 600 3 |Max | 300 4 |Jim | 400 5 |Max | 200 6 |Tom | 600 7 |Jim | 100 我试着得到那些薪水最高的ID和名字 预期结果 ID | Name ---|------ 2 | Tom 3 | Max 4 | Jim 实际结果 ID | Name ---|-

我有下表

ID | Name | Salary
---+------+-------
1  |Tom   | 100
2  |Tom   | 600
3  |Max   | 300
4  |Jim   | 400
5  |Max   | 200
6  |Tom   | 600
7  |Jim   | 100
我试着得到那些薪水最高的ID和名字

预期结果

ID | Name 
---|------
2  | Tom
3  | Max
4  | Jim
实际结果

ID | Name 
---|------
2  | Tom
6  | Tom << duplicate name
3  | Max
4  | Jim
不幸的是,如果最高工资出现两次,则重复出现两次-如何更改子选择以抑制重复名称


这通常使用
行编号()来完成。


那么,你想要哪一个薪水为600英镑的汤姆?@HoneyBadger并不重要@Larnu的可能副本,这是无法通过小组解决的。请看链接中的答案。这是相关的;关于如何只返回一组重复结果的第一个值,有1000个答案。
SELECT e1.ID, e1.Name
FROM Employee e1
WHERE e1.Salary = 
(
  SELECT MAX(e2.Salary) 
  FROM Employee e2
  WHERE e1.Name = e2.Name
);
select . ..
from (select e.*, row_number() over (partition by name order by salary desc) as seqnum
      from employee e
     ) e
where seqnum = 1;