Получить актуальный валютный курс на заданную дату

Выберите записи нужной валюты с rate_date не позже target_date, отсортируйте дату по убыванию и возьмите одну строку. Это вернёт последнее известное значение на указанную дату.

Короткий ответ

Что ответить на собеседовании

Выберите записи нужной валюты с rate_date не позже target_date, отсортируйте дату по убыванию и возьмите одну строку. Это вернёт последнее известное значение на указанную дату.

Подробный разбор

Ответ с пояснениями

Условие

Имеется таблица currency_rates со следующими колонками:

  • cur_code (строка, код валюты, например 'USD', 'EUR')
  • rate_date (DATE, дата, для которой известен курс)
  • exchange_rate (NUMERIC, значение курса)

В таблицу заносятся только те записи, где значение курса изменилось. Если для запрашиваемой даты нет строки, необходимо использовать ближайшую предыдущую дату с доступным курсом (например, если данных на 1‑й января нет, берём курс от 31‑го декабря).

Сформировать SQL‑запрос, принимающий параметры cur_code и target_date и возвращающий актуальный курс валюты.

Ответ

Выберите записи нужной валюты с rate_date не позже target_date, отсортируйте дату по убыванию и возьмите одну строку. Это вернёт последнее известное значение на указанную дату.

Запрос с параметрами, которые нужно привязать через драйвер:

SELECT exchange_rate, rate_date
FROM currency_rates
WHERE cur_code = :cur_code
  AND rate_date <= :target_date
ORDER BY rate_date DESC
LIMIT 1;

Если предыдущего курса вообще нет, результат будет пустым: подставлять будущий курс нельзя. Желательно уникальное ограничение на (cur_code, rate_date); оно также даёт индекс для поиска. Без уникальности несколько разных курсов одной даты потребуют дополнительного правила выбора. Синтаксис placeholders зависит от драйвера.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее