SQL Max Value of Column选择选择哪一行

时间:2016-07-06 14:55:14

标签: sql sql-server group-by sql-server-2014

当一个" callid"

有多个条目时,我遇到选择单行的问题

在这种情况下,有两行被选中:

Assignee           maxTime
Jim Smith         11:31:05
James Smith       17:50:16

我想只选择一个时间最长的行。

我想要的输出:

 Assignee          maxTime
 James Smith      17:50:16

这是我的代码:

select Assignee, MAX(TimeResolv) as maxTime 
from heat8..asgnmnt 
where callid ='00539265' 
    and GroupName like '%cs%' 
Group by Assignee

帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

您可以使用TOP

SELECT TOP 1 * 
FROM heat8..asgnmntt t
ORDER BY t.timeResolv DESC

NOT EXISTS()效率低下:

SELECT * FROM heat8..asgnmntt t
WHERE NOT EXISTS(SELECT 1 FROM heat8..asgnmnt s
                 WHERE s.timeResolv > t.timeResolv)

或使用窗口函数ROW_NUMBER()

SELECT s.Assignee, s.TimeResolv
FROM (
    SELECT t.*,
           ROW_NUMBER() OVER(ORDER BY t.timeResolv) as rnk
    FROM heat8..asgnmntt t) s
WHERE s.rnk = 1

ROW_NUMBER()也可以通过一组查询每组结果来实现。

答案 1 :(得分:0)

您可以使用子查询。您的子查询看起来与您当前的查询完全相同,但您需要从中选择前1位。

select TOP 1 Assignee, (TimeResolv) as maxTime
FROM (
     select Assignee, MAX(TimeResolv) as maxTime 
     from heat8..asgnmnt 
     where callid ='00539265' 
     and GroupName like '%cs%' 
     Group by Assignee
)
ORDER BY TimeResolv DESC

编辑:不需要子查询,但是如果你想使用你上面做的相同代码以便于阅读,或者它对你有意义。您可以继续使用此方法。