MySql : Is there any better way to link transaction table with currency exchange table to get corresponding exchange rate

50 Views Asked by At

Is there any better way (performance wise) to link transactions with currency exchange table where the transaction table has more than a million records ?

tabTran

date amount currency
2023-01-01 100 GBP
2023-01-05 200 INR
2023-01-07 150 EUR
2023-01-13 50 INR
2023-01-15 100 GBP

tabCurrency_Exchange

date from_curr to_curr exch_rate
2022-12-25 AED USD 0.276495000
2022-12-28 AED USD 0.276495000
2022-12-28 PLN USD 0.226435000
2022-12-30 EUR USD 1.170000000
2023-01-02 AED USD 0.277130000
2023-01-02 PLN USD 0.228550000
2023-01-05 PLN USD 0.228550000
2023-01-05 EUR USD 0.971758000
2023-01-06 EUR USD 1.089531680
2023-01-10 PLN USD 1.089531680
2023-01-10 EUR USD 0.235714280
2023-01-14 AED USD 0.272521000
2023-01-15 AED USD 0.276495000
2023-01-15 PLN USD 0.228571400
CREATE TEMPORARY TABLE IF NOT EXISTS tabTran ENGINE=MEMORY  AS (
    SELECT '2023-01-01' `date`, 100 amount, 'AED' currency
    UNION SELECT '2023-01-05', 200, 'PLN'
    UNION SELECT '2023-01-07', 159, 'EUR'
    UNION SELECT '2023-01-13', 50, 'PLN'
    UNION SELECT '2023-01-15', 100, 'AED'
);
    
CREATE TEMPORARY TABLE IF NOT EXISTS tabCurrency_Exchange ENGINE=MEMORY  AS (
    SELECT '2022-12-25' `date`, 'AED' from_curr, 'USD' to_curr, 0.276495000 exch_rate
    UNION SELECT '2022-12-28', 'AED', 'USD', 0.276495000 
    UNION SELECT '2022-12-28', 'PLN', 'USD', 0.226435000 
    UNION SELECT '2022-12-30', 'EUR', 'USD', 1.170000000 
    UNION SELECT '2023-01-02', 'AED', 'USD', 0.277130000 
    UNION SELECT '2023-01-02', 'PLN', 'USD', 0.228550000 
    UNION SELECT '2023-01-05', 'PLN', 'USD', 0.228550000 
    UNION SELECT '2023-01-05', 'EUR', 'USD', 0.971758000 
    UNION SELECT '2023-01-06', 'EUR', 'USD', 1.089531680 
    UNION SELECT '2023-01-10', 'PLN', 'USD', 1.089531680 
    UNION SELECT '2023-01-10', 'EUR', 'USD', 0.235714280 
    UNION SELECT '2023-01-14', 'AED', 'USD', 0.272521000 
    UNION SELECT '2023-01-15', 'AED', 'USD', 0.276495000 
    UNION SELECT '2023-01-15', 'PLN', 'USD', 0.228571400 
);
    

expected result

date amount currency to_curr exch_rate
2023-01-01 100 AED USD 0.276495000
2023-01-05 200 PLN USD 0.228550000
2023-01-07 150 EUR USD 1.089531680
2023-01-13 50 PLN USD 1.089531680
2023-01-15 100 AED USD 0.276495000

what I tried

select `date`, amount, currency, 'USD' to_curr, 
(
    select exch_rate from tabCurrency_Exchange where 
    from_curr = tabTran.currency
    and to_curr = 'USD'
    and `date` <= tabTran.date
    order by `date` desc
    limit 1
) exch_rate
from tabTran;

checked previous posts Multiple Currency Conversions in Single Query Select Exchange Rate based on Currency and Date How to join most recent currency exchange date on a date which falls on a weekend or holiday? Joining Exchange rate with a currency table

0

There are 0 best solutions below