当一个" 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
帮助将不胜感激。
答案 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
编辑:不需要子查询,但是如果你想使用你上面做的相同代码以便于阅读,或者它对你有意义。您可以继续使用此方法。