有人可以告诉我以下查询有什么问题
select 1
from table1 a,
table2 b
where a.pdate=max(b.pdate)
没有编译。
编写此查询的另一种方法是
set @pdate=pdate from table2
select 1
from table1 a,
table2 b
where a.pdate=max(b.pdate)
但我想了解第一个查询的错误。
由于
答案 0 :(得分:2)
但我想了解第一个查询的错误。
错误消息会告诉您可能对您有价值的事情。
聚合可能不会出现在WHERE子句中,除非它在a中 包含在HAVING子句或选择列表中的子查询以及列 被聚合是一个外部参考。
max()
函数是一个返回一组行的最大值的聚合。 where子句用于过滤行。因此,如果您在进行过滤的位置使用聚合,则不清楚您实际想要哪些行的最大值。
重写可能如下所示:
select 1
from dbo.table1 as a
where a.pdate = (
select max(b.pdate)
from dbo.table2 as b
);
答案 1 :(得分:0)
即使是第二次查询也是错误的。
正确的方式,
Select @pdate=max(pdate) from table2
select 1
from table1 a where a.pdate=@pdate
,或者
select 1
from table1 a where a.pdate=(Select max(pdate) from table2)
如果你提到除聚合列之外的其他列名,那么你可以使用group by