Sql 通过“where=”语句选择最大值
假设我有表A和列a1,a2,B和表b1,b2 我需要像这样加入他们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=
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?