在PROC SQL中以最大值的最大值提取重复记录



我正在使用具有多个重复记录的数据库。它具有不正确的活动记录指标,因此我基本上必须使用记录日期手动创建一个活动指示器。

请参阅以下数据的示例:

application_nbr date             Amount
138352          4/26/2017    $10,000.00 
138352          4/22/2017    $9,500.00 
553652          5/1/2017     $2,500.00 
332621          4/15/2017    $7,500.00 
332621          4/3/2017     $8,500.00 

我需要一个从上面拉出的查询:

application_nbr date         Amount
138352          4/26/2017    $10,000.00 
553652          5/1/2017     $2,500.00 
332621          4/15/2017    $7,500.00 

我真的不确定如何解决这个问题。我在想使用Max(日期(的某种子查询?我知道我不能在Where子句中使用Max之类的功能。是否有一个相当简单的方法可以完成此操作?

更新:

SELECT a.*
FROM table_name a
JOIN (SELECT application_nbr, MAX(date) AS max_date
      FROM table_name
      GROUP BY application_nbr) b
ON a.application_nbr = b.application_nbr

有几种方法可以做到这一点。在proc sql中,我会重新合并:

proc sql;
    select t.*
    from (select t.*, max(date) as maxdate
          from t
         )
    where date = maxdate;

在SQL中执行此操作的典型方法是:

select t.*
from t join
     (select application_nbr, max(date) as maxdate
      from t
      group by application_nbr
     ) tt
     on t.application_nbr = tt.application_nbr;

因为您正在使用 SAS数据集

proc sort data=have;
by application_nbr date;
run;
data want;
set have;
by application_nbr date;
if first.date;
run;    

或者如果您真的想使用 Proc SQL 然后

proc sql;  
select a.*,b.amount
from
(select application_nbr,max(date) as date 
 from have 
 group by application_nbr) a
inner join
have b
on a.application_nbr=b.application_nbr; 
quit;

在任何查询时让我知道。

Proc sql;
   select * from have group by application_nbr having date=max(date);
quit;

最新更新