Oracle: используйте аналитическую функцию LEAD, чтобы вы может выработать срок действия каждой ставки.
documentation for LEAD
Это мой код:
SELECT
trx.*
,rates.rate_start_date
,rates.rate_end_date
,rates.rate
,trx.amount * rates.rate rup_amount
FROM
xxcjp_forex_trx trx
--this inline view works out the validity period of each rate by ordering all
--the rates and working out the start date of the next row. It uses analytic
--function LEAD
,(SELECT
xfr.rate_date rate_start_date
,xfr.rate
,xfr.currency
,(LEAD(xfr.rate_date) OVER (ORDER BY xfr.currency, xfr.rate_date))-1 rate_end_date
FROM
xxcjp_forex_rates xfr
) rates
WHERE 1=1
AND trx.trx_date BETWEEN rates.rate_start_date AND rates.rate_end_date
AND rates.currency = 'RUP'
ORDER BY
trx.trx_date
;
На основе этих данных:
CREATE TABLE XXCJP_FOREX_RATES
(rate_date DATE
,currency VARCHAR2(20)
,rate NUMBER
)
;
CREATE TABLE XXCJP_FOREX_TRX
(trx_date DATE
,currency VARCHAR2(20)
,amount NUMBER
)
;
INSERT INTO XXCJP_FOREX_RATES VALUES (TO_DATE('01/03/2016','DD/MM/YYYY'),'RUP',47) ;
INSERT INTO XXCJP_FOREX_RATES VALUES (TO_DATE('03/03/2016','DD/MM/YYYY'),'RUP',49) ;
INSERT INTO XXCJP_FOREX_RATES VALUES (TO_DATE('10/03/2016','DD/MM/YYYY'),'RUP',55) ;
INSERT INTO XXCJP_FOREX_TRX VALUES (TO_DATE('01/03/2016','DD/MM/YYYY'),'USD',10) ;
INSERT INTO XXCJP_FOREX_TRX VALUES (TO_DATE('02/03/2016','DD/MM/YYYY'),'USD',20) ;
INSERT INTO XXCJP_FOREX_TRX VALUES (TO_DATE('03/03/2016','DD/MM/YYYY'),'USD',30) ;
INSERT INTO XXCJP_FOREX_TRX VALUES (TO_DATE('04/03/2016','DD/MM/YYYY'),'USD',40) ;
INSERT INTO XXCJP_FOREX_TRX VALUES (TO_DATE('05/03/2016','DD/MM/YYYY'),'USD',50) ;
INSERT INTO XXCJP_FOREX_TRX VALUES (TO_DATE('06/03/2016','DD/MM/YYYY'),'USD',60) ;
INSERT INTO XXCJP_FOREX_TRX VALUES (TO_DATE('07/03/2016','DD/MM/YYYY'),'USD',70) ;
INSERT INTO XXCJP_FOREX_TRX VALUES (TO_DATE('08/03/2016','DD/MM/YYYY'),'USD',80) ;
INSERT INTO XXCJP_FOREX_TRX VALUES (TO_DATE('09/03/2016','DD/MM/YYYY'),'USD',90) ;
INSERT INTO XXCJP_FOREX_TRX VALUES (TO_DATE('10/03/2016','DD/MM/YYYY'),'USD',100) ;
Oracle или MySQL? – Aleksej
@Aleksej: Mysql –
В следующий раз отметьте тегом! Теперь Кристиан Палмер потратил много времени и сил, написав ответ Oracle. – jarlh