Sobes.tech
Middle
24

Как реализовать запрос с максимальной датой курса для каждой транзакции с учетом выходных и праздников?

Companies where asked
OZONOZON

Answer from AI

sobes.tech AI

Для реализации запроса, который для каждой транзакции выбирает курс с максимальной датой, учитывая выходные и праздники, нужно:

  1. Иметь таблицу с курсами валют, где указаны даты, когда курс был актуален.
  2. Иметь таблицу с календарём, где отмечены выходные и праздники.

Идея запроса — для каждой транзакции найти максимальную дату курса, которая не превышает дату транзакции и при этом является рабочим днём.

Пример на SQL (PostgreSQL):

WITH working_days AS (
  SELECT date
  FROM calendar
  WHERE is_holiday = FALSE AND is_weekend = FALSE
),
max_course_dates AS (
  SELECT t.transaction_id, MAX(c.date) AS max_course_date
  FROM transactions t
  JOIN courses c ON c.date <= t.transaction_date
  JOIN working_days wd ON c.date = wd.date
  GROUP BY t.transaction_id
)
SELECT t.*, c.rate
FROM transactions t
JOIN max_course_dates mcd ON t.transaction_id = mcd.transaction_id
JOIN courses c ON c.date = mcd.max_course_date
  AND c.currency = t.currency
;

Таким образом, для каждой транзакции выбирается курс с максимальной датой, которая не позже даты транзакции и является рабочим днём (не выходным и не праздником).