Sobes.tech
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:

  1. Ir jābūt valūtas kursu tabulai, kurā norādītas datums, kad kurss bija spēkā.
  2. 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).