首页 > 解决方案 > 在 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 子句中。

标签: sql

解决方案


使用相关子查询(或类似技术):

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);

推荐阅读