sql - 在 SQL 中有 Max 子句
问题描述
我希望从表 B 中获取最大日期,但我不理解错误。我是一名 SAS 程序员,并且是 SQL 新手。
select a.*
, b.ZIP_CD
, b.date
from DataA as a
left join DataB as b on a.name = b.name
group by a.name
having max(b.date) = b.date
错误信息是:
消息 8121,级别 16,状态 1,第 14
行列“Datab.Date”在 HAVING 子句中无效,因为它不包含在聚合函数或 GROUP BY 子句中。
解决方案
使用相关子查询(或类似技术):
select a.*, b.ZIP_CD, b.date
from DataA a join
DataB b
on a.name = b.name
where b.date = (select max(b2.date) from DataB b2 where b2.name = b.name);
这不是聚合查询。
顺便说一句,如果您需要最大值,那么您正在寻找一个inner join
. 如果您仍然想保留a
那些不在的值b
,那么:
select a.*, b.ZIP_CD, b.date
from DataA a join
DataB b
on a.name = b.name and
b.date = (select max(b2.date) from DataB b2 where b2.name = b.name);