我陷入了一个非常简单的t-sql查询。请帮忙!
以下是我的结果集:
Percentage---FirstName---SessionId
34-----------ABC---------222
67-----------ABC---------333
11-----------ABC---------444
83-----------XYZ---------555
23-----------XYZ---------666
64-----------XYZ---------777
从上面,我想要每个用户的记录具有最大百分比,例如
Percentage---FirstName---SessionId
67-----------ABC---------333
83-----------XYZ---------555
我似乎无法做到这一点而且我很着急。请尽早帮忙。任何帮助将不胜感激。
感谢。
答案 0 :(得分:8)
SELECT MAX(Percentage) AS Percentage,
FirstName
FROM mytbl
GROUP BY FirstName
或者如果您需要会话ID:
SELECT mytbl.*
FROM mytbl
INNER JOIN (SELECT MAX(Percentage) AS Percentage,
FirstName
FROM mytbl
GROUP BY FirstName) x ON x.Percentage = mytbl.Percentage
AND x.FirstName = mytbl.FirstName
答案 1 :(得分:6)
如果您需要处理关系,那么您可能希望使用窗口函数(假设您使用的是SQL Server 2005或更高版本):
SELECT
*
FROM
(SELECT mytbl.*,RANK() OVER (PARTITION BY FirstName ORDER BY Percentage desc) as rn) t
WHERE
t.rn = 1
因此,如果有两行具有相同的百分比,则它们都将被返回。如果您只想要一个结果,那么您可以在ORDER BY
子句中添加其他“tie-breaker”列,或者从RANK()
切换到ROW_NUMBER()
。