2016-07-06 206 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