Sobes.tech
Middle

Ako implementovať dopyt s maximálnym dátumom kurzu pre každú transakciu s prihliadnutím na víkendy a sviatky?

sobes.tech AI

Odpoveď od AI

Na implementáciu dopytu, ktorý pre každú transakciu vyberá kurz s maximálnym dátumom, pričom zohľadňuje víkendy a sviatky, je potrebné:

  1. Mať tabuľku s kurzami mien, kde sú uvedené dátumy, kedy bol kurz platný.
  2. Mať tabuľku s kalendárom, kde sú označené víkendy a sviatky.

Myšlienka dopytu je — pre každú transakciu — nájsť maximálny dátum kurzu, ktorý neprekračuje dátum transakcie a je pracovným dňom.

Prí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
;

Takto sa pre každú transakciu vyberie kurz s maximálnym dátumom, ktorý nie je neskorší ako dátum transakcie a je pracovným dňom (nie víkend, nie sviatok).