一次组合集合+表格+窗口函数

时间:2017-09-24 19:33:13

标签: oracle sas window-functions

我想在proc sql中做这样的工作:

proc sql;
%connect_to_sql_macro;
create table sql.table as
(
select some_id, date from connection to oracle
(
select some_id, date, row_number()over(partition by some_id order by date) as row from dataset d join sql_table s on d.some_id=s.some_id 
) where row=1

基本上我需要根据与oracle表连接的数据集在oracle中创建表,并为每个id获取第一个日期。 如果我使用“从oracle”传递它没有看到数据集,如果我反过来我不能使用窗口函数(row_number())因为它们不在SAS中。现在我从该数据集创建一个表,然后进行传递,但它很大,我需要一次性完成。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

你最好在SAS中做这件事。 也可以一步完成

libname lib <oracle connection options>;
proc sql;
select some_id
            ,date
from dataset d
inner join lib.sql_table s
    on d.some_id=s.some_id
group by some_id
having date=min(date)
;
quit;

proc sql;
%connect_to_sql_macro;
select some_id
            ,date
from dataset d
inner join (select * from connection to oracle (
               select * from sql_table
               )
            ) s
    on d.some_id=s.some_id
group by some_id
having date=min(date)
;
quit;

此外,尽可能多地限制从oracle表中读取的记录数量。