Sobes.tech
Middle

Hogyan valósítható meg egy lekérdezés a maximális árfolyam dátummal minden tranzakció esetében, figyelembe véve a hétvégeket és ünnepnapokat?

sobes.tech MI

Válasz az MI-től

Az adott tranzakcióhoz, figyelembe véve a hétvégeket és ünnepnapokat, kiválasztani a maximális dátumú árfolyamot, ehhez szükség van:

  1. Egy táblára az árfolyamokról, ahol meg vannak adva azok a dátumok, amikor az árfolyam érvényes volt.
  2. Egy naptár táblára, ahol a hétvégeket és az ünnepnapokat jelölték.

A lekérdezés ötlete — minden tranzakció esetén — megtalálni a maximális árfolyam dátumát, amely nem haladja meg a tranzakció dátumát, és munkanapnak számít.

SQL példa (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
;

Így minden tranzakció esetén kiválasztásra kerül a legnagyobb dátumú árfolyam, amely nem későbbi a tranzakció dátumánál, és munkanapnak számít (nem hétvége, nem ünnepnap).