2017-08-18 5 views
0

私はACCT_NUM、EFF_DATE、およびACCT_NAMEの3つの列を持つテーブルを持っています。一意のキーは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

と複数のアカウント。

in節を使用してアカウント番号のセットのEff_dateに基づいて最新のアカウント名を取得します。

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

使用しているdatabsaeであなたの質問にタグを付けてください。 –

+0

この質問はDB2データベース用 – Bala

答えて

1

はあなたが行うことができます

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()を使用することができ、以下のデータを取得したい:標準SQLでは

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

この回答を選択しなかったことを驚かせています。集約と結合よりはるかに効率的でなければなりません。 –

関連する問題