我正在处理具有多个重复记录的数据库。它有一个不正确的活动记录指示器,所以我基本上必须使用记录日期手动创建一个活动指示器。
请参阅以下数据的示例:
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这样的函数。是否有一种相当简单的方法来实现这一目标?
答案 0 :(得分:3)
更新:
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
答案 1 :(得分:1)
由于您使用的是 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;
如有任何疑问,请与我联系。
答案 2 :(得分:1)
有几种方法可以做到这一点。在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;
答案 3 :(得分:0)
Proc sql;
select * from have group by application_nbr having date=max(date);
quit;