У меня есть таблица, в которой хранятся курсы обмена валют на определенный день (TBAADM.EXC
). Однако обменные курсы вводятся вручную, а введенный ранее ошибочный курс должен быть заархивирован, поэтому в таблице может оказаться несколько записей заданного обменного курса «от-до» в день из-за ошибки пользователя или из-за того, что обменный курс изменился во время день. Для этого у меня есть столбец в таблице с именем UPDATE_NO
, который указывает, что данная запись является n-й записью за день. Например, первая запись обменного курса за день будет иметь UPDATE_NO
значение 001
. Если обменный курс изменился или был введен неправильно, следующая запись будет иметь значение 002
и так далее.
Что мне нужно сделать сейчас, так это получить последнюю запись обменного курса от-до за данный день:
select exc_rate
from tbaadm.exc
where bank_id = 'BANK01'
and designation = 'REV'
and fr_crncy_code = 'USD'
and to_crncy_code = 'PHP'
and rtlist_date = '10-AUG-2015'
and update_no = --maximum
Это то, что у меня сейчас есть, но я думаю, что это определенно повлияет на время выполнения моего скрипта, поскольку я дважды просматриваю таблицу EXC
для каждой записи:
select exc_rate
from tbaadm.exc
where bank_id = 'BANK01'
and designation = 'REV'
and fr_crncy_code = 'USD'
and to_crncy_code = 'PHP'
and rtlist_date = '10-AUG-2015'
and update_no = (select max(update_no) from tbaadm.exc
where bank_id = 'BANK01'
and designation = 'REV'
and fr_crncy_code = 'USD'
and to_crncy_code = 'PHP'
and rtlist_date = '10-AUG-2015')
Есть ли более эффективный способ использования функции MAX()? Любая помощь будет оценена.