选择多个数据集的公共列的最大值

时间:2015-06-05 05:16:25

标签: sql sas

我有一个每日计划流程,可刷新同一个库中的一堆表。在流程结束时,所有表应具有相同的最新记录。我想通过检查date的最大值来仔细检查这一点。

但问题是,如何在这些表中快速提取日期的所有最大值然后进行比较呢?

proc sql;
select max(date) from lib.table1;
select max(date) from lib.table2;
select max(date) from lib.table3;
...
quit;

3 个答案:

答案 0 :(得分:1)

创建一个视图,使用日期变量附加所有表,并从变量中选择最大日期。如果表没有相同的结构,则可以修改set语句以仅保留日期变量。无论如何,您可能希望加快这一过程。

data max_date/view=max_date;
   set table: indsname=source;
   dset=source;
   keep date dset;
run;

proc sql;
  create table maximum_date as
  select max(date) as Latest_Date 
  from max_date
  group by dset;
 quit;

答案 1 :(得分:0)

在纯SQL中,它看起来像

select 'table1' table_name, max(date) max from lib.table1
union all
select 'table2' table_name, max(date) max from lib.table2
union all
select 'table3' table_name, max(date) max from lib.table3

其他选项包括存储过程,内联视图以及更多内容。

答案 2 :(得分:0)

如果他们是所有庞大的数据集(我猜他们都是这样),那么你可能最好在每个数据集的最后一个处理数据块中保留最大日期,你需要比较 - 然后将这些保存到宏变量:

data table1(drop=maxdate) ;
  retain maxdate ;
  set _table1 end=eof ;
  *** other code here ;

  if date>maxdate then maxdate=date ;
  if eof then call symput('table1mdt',maxdate) ;
run ;

然后,您可以将这些内容写入报告,例如;

data _null_ ;
  put "Table1 max date= &table1mdt" ;
  put "Table2 max date= &table2mdt" ;
run ;