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é:
- Mať tabuľku s kurzami mien, kde sú uvedené dátumy, kedy bol kurz platný.
- 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).