Sobes.tech
Middle

Jak implementovat dotaz s maximálním datem kurzu pro každou transakci s ohledem na víkendy a svátky?

sobes.tech AI

Odpověď od AI

Pro implementaci dotazu, která pro každou transakci vybírá kurz s maximálním datem, přičemž bere v úvahu víkendy a svátky, je potřeba:

  1. Mít tabulku s kurzy měn, kde jsou uvedena data, kdy byl kurz platný.
  2. Mít tabulku s kalendářem, kde jsou označeny víkendy a svátky.

Myšlenka dotazu je — pro každou transakci — najít maximální datum kurzu, které nepřesahuje datum transakce a je pracovní den.

Příklad v 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
;

Tímto způsobem se pro každou transakci vybírá kurz s maximálním datem, které není pozdější než datum transakce a je pracovní den (ne víkend, ne svátek).