2017-04-18 62 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;