Sql 最大函数重复值

Sql 最大函数重复值,sql,sql-server-2008,Sql,Sql Server 2008,我使用下面的查询来选择用户的最高资格,但我得到了重复的值。因为用户具有多个资格 SELECT hrQualifications.Qualification,hrUserQualifications.HRUserID,MAX(hrQualifications.QualificationLevel) as Qlevel FROM hrQualifications RIGHT OUTER JOIN hrUserQualifications O

我使用下面的查询来选择用户的最高资格,但我得到了重复的值。因为用户具有多个资格

SELECT     hrQualifications.Qualification,hrUserQualifications.HRUserID,MAX(hrQualifications.QualificationLevel) as Qlevel
FROM         hrQualifications RIGHT OUTER JOIN
                  hrUserQualifications ON hrQualifications.QualificationID = hrUserQualifications.QualificationID RIGHT OUTER JOIN
                  hrUserApplyforPositions ON hrUserQualifications.HRUserID = hrUserApplyforPositions.HRUserID
WHERE     (hrUserApplyforPositions.HrPositionID = 1)
group by hrQualifications.Qualification,hrUserQualifications.HRUserID
我得到的输出

Qualification    UserID      QualificationLevel
B.Sc.(Hons)        12        16
    F.Sc           12        12
B.Sc.(Hons)        18        16
需要输出。我想要最高资格的用户

Qualification    UserID      QualificationLevel
B.Sc.(Hons)        12            16   
B.Sc.(Hons)        18            16

一个很好的方法是使用
row\u number()
。这将向行添加一个序列号,在分区内重新开始,并按另一个字段排序

对于您的查询:

with t as (
      SELECT q.Qualification, uq.HRUserID, q.QualificationLevel as Qlevel,
             row_number() over (partition by uq.HRUserID
                                order by q.QualificationLevel desc
                               ) seqnum
      FROM hrQualifications q RIGHT OUTER JOIN
           hrUserQualifications uq
           ON q.QualificationID = uq.QualificationID RIGHT OUTER JOIN
           hrUserApplyforPositions uap
           ON uq.HRUserID = uap.HRUserID
      WHERE uap.HrPositionID = 1
    )
select *
from t
where seqnum = 1;

请注意,我还添加了表别名以使查询更具可读性。

需要更多信息,可能是。。。