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

在PROC SQL中提取最大值的重复记录,sql,sas,duplicates,max,Sql,Sas,Duplicates,Max,我正在使用一个包含多个重复记录的数据库。它有一个不正确的活动记录指示器,所以我基本上必须使用记录的日期手动创建一个活动指示器 请参见以下数据示例: 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

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

请参见以下数据示例:

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(date)的某种子查询?我知道我不能在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
更新:

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

由于您正在使用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;

如果有任何疑问,请告诉我。

因为您正在使用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
中,我将进行重新合并:

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;

有几种方法可以做到这一点。在
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;

在HAVING子句中使用MAX()。ie
having date=max(date)
@Reeza我尝试使用having with max(date),它只提取表中日期最高的记录。它刚刚提取了日期为2017年5月1日的记录。您是否在应用程序中包含GROUP BY?请在HAVING子句中使用MAX()。ie
having date=max(date)
@Reeza我尝试使用having with max(date),它只提取表中日期最高的记录。它刚刚调出了日期为2017年5月1日的记录。你是否在申请中加入了一个团员?对不起,我没有在我的帖子上适当地解释我的问题。为了更准确,我做了编辑。数据库中还有其他字段我不想在其上使用摘要函数。这就是为什么按照您推荐的方式分组。由于您正在使用内部连接,所以不需要“where”条件。@G.Arima您对where子句的看法是正确的。我更新了。很抱歉,我没有在我的帖子上适当地解释我的问题。为了更准确,我做了编辑。数据库中还有其他字段我不想在其上使用摘要函数。这就是为什么按照您推荐的方式分组。由于您正在使用内部连接,所以不需要“where”条件。@G.Arima您对where子句的看法是正确的。我更新了它。