如何解决SQL中的if first.row怎么办
我需要使用 SAS EG 从 Oracle 数据库下载一堆数据。为此,我需要将以下代码转换为 Oracle sql。有人可以帮忙吗?
Data have;
Infile datalines delimiter=',';
Input A $ B C;
Datalines;
abc123,5,1
abc123,2
abc123,3
abc123,10,4
abc123,5
abc123,6
abc123,20,7
;
Run;
Proc sort data=have;
By a b c;
Run;
Data want;
Set have;
By A B;
If first.B;
Run;
解决方法
如果你只有这三个变量,那就很容易了。
proc sql;
create table want as
select distinct a,b,c
from have
group by a,b
having c=min(c)
;
quit;
结果:
Obs A B C
1 abc123 5 1
2 abc123 10 4
3 abc123 20 7
,
我要做的第一件事就是斯图所说的;在直通中测试这样做。
libname oralib oracle [connection options];
options sastrace=',d' sastraceloc=saslog;
Data want;
Set oralib.have;
By A B;
If first.B;
Run;
直接那个,看看它是否像你想要的那样工作。它可能会做你需要的。您不需要 proc sort
,排序将在数据库中进行。
但是,如果没有,我怀疑它实际上不会通过整个事情,因为我不认为直接支持它,您可以在 SQL pass through 中完成。
这是基本的 SAS 代码等价物:
proc sql;
select distinct country,region,actual
from sashelp.prdsale main
where actual = (
select min(actual)
from sashelp.prdsale sub
where sub.country = main.country
and sub.region = main.region
);
quit;
这是oracle兼容的代码,你只需要替换实际的表/变量并将其包装在pass through中,即
proc sql;
connect to oracle [connection options];
select * from connection to oracle (
... your query here ...
);
quit;
顺便说一下,如果您知道没有 distinct
将只返回每条记录的一行,则不需要它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。