2013-12-18 89 views
-1

我正在使用下面的查询来挑选用户最高资格但我重复的值。因为用户有多个资格。最大功能重复值

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 
+0

需要更多信息,可能... –

回答

1

做你想做的事的一个好方法是用row_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; 

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