2016-02-05 44 views
2

QUERY:從表中選擇一個數據,同時取一列的MAX值

我有包括像用戶名和姓

我想要做的是一個表:

我想獲取的名字,同時獲得最大用戶ID是否

我的新手嘗試:

select FirstName from tblUsers where MAX(UserId)[email protected] 

其是表示的錯誤:聚合不應出現在WHERE子句中,除非它是在含有HAVING子句或選擇列表中一個 子查詢

,且列 被聚合爲外部參考。

沒有@UserId查詢也歡迎

+2

你能否包括樣本數據和預期的輸出?雖然下面的答案會做你所要求的,但我不確定這正是你想要的。一些演示記錄應該可以幫助我們解決這個問題。 –

+0

UserID是主鍵嗎? – jarlh

+0

不可能告訴你正在嘗試做什麼 –

回答

2

嘗試在以下使用HAVING

select FirstName 
from tblUsers 
group by FirstName 
having MAX(UserId)[email protected] 

更新1

如果你想只得到1具有FirstName最高UserId您可以在以下地址使用TOP 1

select top 1 FirstName 
from tblUsers 
order by UserId desc 

更新2

我不建議使用此解決方案,但如果你想(出於任何原因)使用MAX(UserId),你可以這樣做:

select FirstName 
from tblUsers 
group by FirstName 
having max(UserId) = (select max(UserId) from tblUsers) 
+0

這不起作用 – Arka

+2

@Arka不工作是不夠的。如果你想得到正確的答案,你應該提供更多的信息。什麼不工作?你有錯誤嗎?不正確的結果?還提供樣本數據和期望的輸出。 –

+0

你可以幫我一個查詢,它將爲我提供最大UserId的名字。這就是我的要求。 – Arka

0
select FirstName from tblUsers group by FirstName having MAX(UserId)[email protected] 

HAVING就像聚合表達式的where子句。

但這對我來說似乎沒有意義。如果@UserId是表中最大的用戶ID,那麼你只會得到一行,所以我不太明白你想要什麼。

+0

如果您想使用有,並且這是重複的答案,您必須使用group by。 –

+0

是的我剛剛在編輯 –

+0

中添加了我希望在單個查詢中擁有最大UserId的名字 – Arka

0

聚合不會在where子句的支持,因爲下面是邏輯查詢階段

from 
where 
group by 
having 
select 
order by 
top 

所以你的情況,SQL去你的表,並在其中是未知的that從句你問的聚集結果因爲SQL在這個階段只知道表列......因爲我們使用group by進行聚合,所以下一個有權訪問group by結果的運算符具有,所以您必須引用具有或使用派生表的任何聚合或cte

1

與其他人一樣,你應該試着更準確地明確你想要的東西。閱讀Stanislovas的回答你的第二個評論後,我想這是你想要什麼:

SELECT FirstName 
FROM tblUsers 
WHERE UserId = 
     (SELECT MAX(UserId) 
     FROM tblUsers 
    ) 

子查詢首先選擇的最大用戶ID值,然後將其作爲值來選擇對應的名字。

+0

謝謝@Henk Kok ....它會幫助我很多 – Arka

相關問題