假设我的表格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=max(select a1 from A))
。它不起作用。我需要一个where=
解决方案,因为B
很大且where=
非常快
答案 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;