Sobes.tech
Middle

Как да реализираме заявка с максимална дата на курса за всяка транзакция, като се вземат предвид уикендите и празниците?

sobes.tech AI

Отговор от 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
;

По този начин за всяка транзакция се избира курсът с максимална дата, която не е по-нова от датата на транзакцията и е работен ден (не уикенд и не празник).