Я получаю курсы обмена валют через Riksbanken API. Этот API не дает значений для праздников, субботы или воскресенья. Так что мои курсы валют пока что пусты. Однако, когда я конвертирую валюты в своих таблицах, я выполняю соединение на основе даты и валюты. Итак, в случае, когда у меня транзакция в воскресенье, я не могу ее преобразовать, потому что это NULL, а сумма транзакции * NULL = NULL.
В основном это моя ситуация:
DECLARE @fxrates TABLE(cur varchar(5), rate decimal, rowDate date);
INSERT INTO @fxrates VALUES
('EUR',10.40,'2020-04-30')
, ('EUR',10.50,'2020-05-01')
, ('EUR',NULL,'2020-05-02')
, ('EUR',NULL,'2020-05-03')
, ('EUR',10.60,'2020-05-04')
, ('EUR',10.70,'2020-05-05')
DECLARE @value TABLE(cur varchar(5), amount decimal, rowDate date);
INSERT INTO @value VALUES
('EUR',1500,'2020-04-30')
, ('EUR',9000,'2020-05-01')
, ('EUR',1000,'2020-05-02')
, ('EUR',300,'2020-05-03')
, ('EUR',160,'2020-05-04')
, ('EUR',170,'2020-05-05')
--How I convert the values
select v.amount * fx.rate as [Converted amount] from @fxrates fx
JOIN @value v
on fx.cur=v.cur
and fx.rowDate=v.rowDate
Моим решением для этого было бы всегда заменять NULL на «более раннее» значение, основанное на дате. Однако я понятия не имею, как этот logi c будет реализован в SQL. Итак, моя таблица fxrates будет выглядеть так:
('EUR',10.40,'2020-04-30')
('EUR',10.50,'2020-05-01')
('EUR',10.50,'2020-05-02')
('EUR',10.50,'2020-05-03')
('EUR',10.60,'2020-05-04')
('EUR',10.70,'2020-05-05')
Будет ли замена значений NULL лучшим подходом для продвижения вперед? И как я могу этого добиться, используя SQL?