2016-07-06 155 views
0

我在与选择时,有一个“呼叫ID”列选择选择哪个行的SQL最大价值

在这种情况下的多个条目的单个行中的问题有被选择两行:

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 

帮助,将不胜感激。

+1

您可以执行TOP 1和按最大时间排序desc – mxix

+0

也可以显示样本表数据。 (给出指定结果的那个) – jarlh

+0

这工作 - 谢谢你。 – obizues

回答

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()也很好做它一个查询每个组的结果。

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 

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

+1

不需要子查询 – sagi

+0

我更新了答案。如果你刚刚开始使用SQL,那么不需要子查询,但有时它的可读性很好。 – Kyle