Прошу помочь с восстановлением прежнего курса валюты. Например. У меня есть две таблицы (Orders и CurrencyRates), к которым я хочу присоединиться. Первая таблица содержит заказы в евро, а вторая - курс валюты от евро к доллару США.

enter image description here

Я хочу присоединиться к нему до даты заказа. Проблема связана с датой заказа "10.11.2018", которая имеет нулевую ставку из таблицы CurrencyRates. Я хотел бы иметь здесь значение из курса предыдущего дня (в данном случае «09.11.2018»). А для будущей даты («18.11.2018») я хотел бы иметь значение, имеющее max (Date) из CurrencyRates таблица. Есть ли способ присоединиться к ней, чтобы получить ожидаемые значения?

Спасибо за помощь!

1
NewSQLGuy 16 Ноя 2018 в 19:26

1 ответ

Лучший ответ

Вы можете использовать cross apply:

select o.*, cr.date, cr.rate, cr.currency
from orders o cross apply
     (select top (1) cr.*
      from currencyrates cr
      where cr.date <= o.orderdate
      order by cr.date desc
     ) cr;
0
Gordon Linoff 16 Ноя 2018 в 16:50