在SQL中使用Max子句

时间:2019-03-04 23:03:00

标签: sql

我希望从表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行
  在HAVING子句中,“ Datab.Date”列无效,因为它既不在聚合函数中也不在GROUP BY子句中。

1 个答案:

答案 0 :(得分:1)

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

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