Хотя я не могу объяснить, почему он делает то, что делает ... Я не знаю, почему вы присоединяетесь, когда все транзакции происходят из таблицы TransactionsV2.Внутреннее левое соединение вытягивает ВСЕ транзакции, присоединенные к обменному курсу, но не применяется, применяя все транзакции.Затем присоединение к внешнему экземпляру на конкретную дату.
Из того, что я вижу, ваша таблица TransactionV2 имеет такую структуру:вычисление обменного курса сделано, но все же в конечном итоге сгруппировано по сущности ... Я бы попробовал что-то вроде.
SELECT
t1.EntityID,
SUM( ROUND(CASE WHEN t1.currency != "GBP"
THEN t.amount/er.exchange_rate
ELSE t.amount END, 2) ) Amount
from
TransactionsV2 t1
LEFT JOIN total_control.exchange_rates er
ON t1.currency = er.currency
WHERE
t1.paymentType IN ("DB", "3D")
AND t1.processing_time >= '2019-04-01 00:00:00'
AND t1.processing_time <= '2019-04-20 23:59:59'
AND t1.status = 1
GROUP BY
t1.entityId
Он проходит записи раз и только для критериев.Я изменил объединение, чтобы обменять курсы на LEFT-JOIN в случае отсутствия записи - так как я не знаю точных условий, которые могут (или нет) совпадать. Может быть, это ваше значение! = "GBP" в этом случае/when.
Чтобы обеспечить некоторую оптимизацию и количество транзакций, я бы построил составной индекс для вашей таблицы транзакций на
( Status, Processing_Time, PaymentType, EntityID )