Для SQL Server Я предлагаю применить оператор, и если вам может понадобиться вернуть NULL, если он не найден, используйте outer apply
select a.*,rate.conversion
from a
outer apply (
select top(1) b.conversion
from b
where b.fromcur = a.currency and b.date <= a.date
-- and b.date > dateadd(day,-7,a.date)
order by b.date desc
) as rate
Обратите внимание, что если вам нужно ограничить, насколько далеко вы ищете ставку, используйте дополнительное условие в предложении where, как предложено выше.
Вы можете использовать коррелированный подзапрос в предложении select, но я рекомендую использовать подход, описанный выше.
select a.*
, (select top(1) b.conversion
from b
where b.fromcur = a.currency and b.date <= a.date
-- and b.date > dateadd(day,-7,a.date)
order by b.date desc
) as conversion
from a