Sobes.tech
Middle

Kako implementirati upit sa maksimalnim datumom kursa za svaku transakciju uzimajući u obzir vikende i praznike?

sobes.tech АИ

Одговор од АИ

Za implementaciju upita koji za svaku transakciju bira kurs sa maksimalnim datumom, uzimajući u obzir vikende i praznike, potrebno je:

  1. Imati tabelu sa kursevima valuta, gde su navedeni datumi kada je kurs bio važeći.
  2. Imati tabelu sa kalendarom, gde su označeni vikendi i praznici.

Ideja upita je — za svaku transakciju — pronaći maksimalni datum kursa koji ne prelazi datum transakcije i koji je radni dan.

Primer u 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
;

Na ovaj način, za svaku transakciju, bira se kurs sa maksimalnim datumom koji nije kasniji od datuma transakcije i koji je radni dan (ne vikend, ne praznik).