2017-08-18 46 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

令人驚訝的是,您並未選擇此答案。它應該比聚合和連接更高效。 –

相關問題