Sobes.tech
Middle

Kaip įgyvendinti užklausą su maksimaliu kurso data kiekvienai operacijai, atsižvelgiant į savaitgalius ir šventes?

sobes.tech AI

Atsakymas iš AI

Kiekvienai operacijai, atsižvelgiant į savaitgalį ir šventes, reikalinga pasirinkti maksimalią datą turintį kursą:

  1. Turėti valiutų kursų lentelę, kurioje nurodytos datos, kada kursas buvo galiojantis.
  2. Turėti kalendoriaus lentelę, kurioje pažymėti savaitgaliai ir šventės.

Klausimo esmė — kiekvienai operacijai rasti maksimalią kursų datą, kuri neviršija operacijos datos ir yra darbo diena.

SQL pavyzdys (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
;

Taip kiekvienai operacijai pasirenkamas kursas su maksimaliu datumu, kuris neviršija operacijos datos ir yra darbo diena (ne savaitgalis, ne šventė).