QUERY:
我有一个包含UserId和FirstName
等列的表我想做的是:
如果获得UserId
,我想获取最大值我的新手尝试:
select FirstName from tblUsers where MAX(UserId)=@UserId
显示错误:
聚合可能不会出现在WHERE子句中,除非它在a中 包含在HAVING子句或选择列表中的子查询以及列 被聚合是一个外部参考。
也欢迎没有@UserId的查询
答案 0 :(得分:1)
尝试在以下内容中使用HAVING
:
select FirstName
from tblUsers
group by FirstName
having MAX(UserId)=@UserId
更新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)
答案 1 :(得分:0)
select FirstName from tblUsers group by FirstName having MAX(UserId)=@UserId
HAVING就像聚合表达式的where子句。
但这似乎对我没有意义。如果@UserId是表格中的最大用户ID,您只会获得一行,所以我不太了解您的需求。
答案 2 :(得分:0)
where子句不支持聚合,因为下面是逻辑查询阶段
from
where
group by
having
select
order by
top
所以在你的情况下,SQL会转到你的表和where子句,你要求聚合的结果在那个时间点是未知的,因为SQL在这个阶段只知道表列...因为我们使用group by进行聚合,有权访问group by结果的下一个运算符,所以你必须引用任何聚合来使用或使用派生表或cte
答案 3 :(得分:0)
与其他人一致,您应该尝试更明确地说明您想要的内容。阅读完Stanislovas'回答我认为这就是你想要的:
SELECT FirstName
FROM tblUsers
WHERE UserId =
(SELECT MAX(UserId)
FROM tblUsers
)
子查询首先选择最大的UserId值,然后将其用作值以选择相应的FirstName。