0

特定のアカウントの最大残高を取得しようとしています

ACCT_BALANCE table:
ACCOUNT_JOIN,BALANCE_UPDATE_DATE,ACCT_VALUE
1   11:49 AM 3/21/2017  1000
1   10:49 AM 5/29/2017  2121
2   11:49 AM 3/29/2017  3332    
2   13:21 AM 3/33/2017  110
3   11:50 AM 4/4/2017   888 
4   10:49 AM 3/29/2017  66  
4   11:50 AM 3/3/2017   57000
4   10:49 AM 2/29/2017  2265
4   13:21 AM 3/2/2017   555 
4   11:50 AM 8/9/2017   555

たとえば、2017 年 5 月 29 日以降、アカウント参加 1 の最大残高は 2121 です。

パフォーマンスに関しては、何が良くなりますか? 内部結合またはランク()オーバーでMAXを使用していますか?

CREATE OR REPLACE VIEW MAX_VAL_VIEW
AS
SELECT ACCT_VALUE,ACCOUNT_JOIN
  FROM ( 
        SELECT ACCT_VALUE,ACCOUNT_JOIN,
           rank() over (partition by ACCOUNT_JOIN order by BALANCE_UPDATE_DATE desc) rnk
        FROM ACCT_BALANCE  
      )
 WHERE rnk = 1
/


CREATE OR REPLACE VIEW MAX_VAL_VIEW
AS
              SELECT A.ACCT_VALUE ,A.ACCOUNT_JOIN 
              FROM ACCT_BALANCE A
                WHERE A.BALANCE_UPDATE_DATE = (
                    SELECT max(B.BALANCE_UPDATE_DATE)
                    FROM ACCT_BALANCE B
                    WHERE B.ACCOUNT_JOIN = A.ACCOUNT_JOIN
        )
/
4

1 に答える 1