500k トランザクションのテーブルがあります。特定の日付の最後の残高を取得したい。そのため、以下のようなクエリを返しました。
SELECT curr_balance
FROM transaction_details
WHERE acct_num = '10'
AND is_deleted = 'N'
AND ( value_date, srl_num ) IN(
SELECT MAX( value_date ), MAX( srl_num )
FROM transaction_details
WHERE TO_DATE( value_date, 'dd/mm/yyyy' )
<= TO_DATE( ADD_MONTHS( '05-APR-2012', 1 ), 'dd/mm/yyyy' )
AND acct_num = '10'
AND is_deleted = 'N'
AND ver_status = 'Y' )
AND ver_status = 'Y'
これは、特定の月ごとの最後の残高を見つけるために、12 か月の増分に対して実行する必要があります。しかし、このクエリは CPU コストが高く、12 倍の時間がかかっています。上記のクエリを修正して、結果をより高速に取得する方法。これを PL/SQL で 2 つの部分に分割してパフォーマンスを実現できるかどうか。?