通过“where =”语句选择MAX值

时间:2017-04-18 10:47:08

标签: sql sas

假设我的表格A包含a1a2B表格b1b2

我需要像这样加入他们

proc sql;
    create C as
    select a1, b1
    from A as t1
    left join  B( where=(b1=max(select b1 from B)) as t2
        on t1.a2 = t2.b2
run;

问题出在 where=(a1=max(select a1 from A)) 。它不起作用。我需要一个where=解决方案,因为B很大且where=非常快

2 个答案:

答案 0 :(得分:3)

您的情况在第一个表中。因此,在left join中,这种情况通常出现在where条款中。 second 表中的条件将包含在on子句中。

执行所需操作的一种方法是使用子查询:

proc sql;
    create C as
    select a1, b1
    from A t1 left join
         B t2 
        on t1.a2 = t2.b2
    where t1.a1 = (select max(tt1.a1) from A tt1)
run;

答案 1 :(得分:1)

似乎你只是语法错了。这将获得B记录,其中b2与a2匹配,b1是表中的最大b1值。

create table c as
  select a.a1, b.b1
  from a
  left join b on b.b2 = a.a2
              and b.b1 = (select max(b1) from b);

或者您只是想从b2与a2匹配的所有B记录中获取最大值b1?那将是:

create table c as
  select a.a1, max(b.b1)
  from a
  left join b on b.b2 = a.a2
  group by a.a1;