2017-04-18 64 views
1

想,我有表A的列a1a2Bb1b2选择MAX值由“凡=”语句

我要加入他们这样

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

您试图将外部连接B记录仅限于那些a1是最大a1值的记录? –

+0

@ThorstenKettner谢谢,我编辑。答案仍然相关吗? –

+0

好的,所以你想外连接B记录,其中b1是最大b1值,而b2是a2? –

回答

3

你的条件是在第一表。因此,在left join中,这种情况通常出现在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; 
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); 

或者你只是试图从所有B记录中获得最大值b1,其中b2与a2相匹配?那将是:

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