2017-08-18 16 views
0

我有一个包含ACCT_NUM,EFF_DATE和ACCT_NAME三列的表。唯一键是ACCT_NUM和EFF_DATE。选择一个最大日期为一组账户号码的行

例如,数据,

ACCT_NUM EFF_DATE ACCT_NAME 0000100200 2017-01-01 Account 1 0000100200 2017-03-10 Account A 0000100200 2017-08-22 Account Alpha 0000100230 2017-01-01 Account C 0000100230 2017-05-20 Account Charlie

和多个帐户。

想要根据Eff_date获取使用in子句中的一组帐户编号的最新帐户名称。

select * from ACCT_MASTER where acct_num in ('0000100200', '0000100230') order by eff_date fetch 1 row only; -- but this query returns only one account

想获得以下数据,

ACCT_NUM ACCT_NAME 0000100200 Account Alpha 0000100230 Account Charlie

+0

用您正在使用的数据库标记您的问题。 –

+0

此问题针对DB2数据库 – Bala

回答

1

在标准SQL中,你可以做

select t1.* 
from your_table t1 
join 
(
    select acct_num, max(eff_date) as dt 
    from your_table 
    group by acct_num 
) t2 on t1.acct_num = t2.acct_num 
    and t1.eff_date = t2.dt 
0

您可以使用row_number()

select am.* 
from (select am.*, 
      row_number() over (partition by acct_num order by eff_date desc) as seqnum 
     from ACCT_MASTER am 
     where acct_num in ('0000100200', '0000100230') 
    ) am 
where seqnum = 1 
order by eff_date 
fetch 1 row only 
+0

令人惊讶的是,您并未选择此答案。它应该比聚合和连接更高效。 –

相关问题