Sql 通过“where=”语句选择最大值

Sql 通过“where=”语句选择最大值,sql,sas,Sql,Sas,假设我有表A和列a1,a2,B和表b1,b2 我需要像这样加入他们 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=maxselect a1 from A。为什么它不起作用。我需要一个where=解,因为B很大,where=

假设我有表A和列a1,a2,B和表b1,b2

我需要像这样加入他们

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=maxselect a1 from A。为什么它不起作用。我需要一个where=解,因为B很大,where=非常快,你的条件在第一张表上。因此,在左连接中,这样的条件通常出现在where子句中。第二个表中的条件将包含在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;
你的情况在第一张桌子上。因此,在左连接中,这样的条件通常出现在where子句中。第二个表中的条件将包含在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;

看来你只是把语法弄错了。这将获得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;

看来你只是把语法弄错了。这将获得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;

“您试图将B记录与a1为最大a1值的a记录进行外部连接吗?”ThorstenKettner谢谢,我编辑过。答案仍然相关吗?好的,那么你想外接B记录,其中b1为最大b1值,b2与a2匹配?你只想将B记录外接至a1为最大a1值的a记录?@ThorstenKettner谢谢,我编辑过。答案仍然相关吗?好的,那么你想加入B记录,其中b1是最大b1值,b2匹配a2?