Middle
Kā īstenot vaicājumu ar maksimālo kursa datumu katrai transakcijai, ņemot vērā brīvdienas un svētku dienas?
sobes.tech AI
Atbilde no AI
Lai īstenotu vaicājumu, kas katrai transakcijai izvēlas kursu ar maksimālo datumu, ņemot vērā nedēļas nogales un svētkus, nepieciešams:
- Ir jābūt valūtas kursu tabulai, kurā norādītas datums, kad kurss bija spēkā.
- Ir jābūt kalendāra tabulai, kurā ir atzīmēti nedēļas nogales un svētki.
Ideja ir — katrai transakcijai — atrast maksimālo kursa datumu, kas nepārsniedz transakcijas datumu un ir darba diena.
SQL piemērs (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ādējādi, katrai transakcijai tiek izvēlēts kurss ar maksimālo datumu, kas nav vēlāk par transakcijas datumu un ir darba diena (ne nedēļas nogale, ne svētki).