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:
- Mít tabulku s kurzy měn, kde jsou uvedena data, kdy byl kurz platný.
- 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).