Sobes.tech
Middle

Cum se implementează o interogare cu data maximă a cursului pentru fiecare tranzacție, luând în considerare weekend-urile și zilele de sărbătoare?

sobes.tech AI

Răspuns de la AI

Pentru a implementa interogarea care, pentru fiecare tranzacție, selectează cursul cu data maximă, ținând cont de weekend-uri și zilele de sărbătoare, ai nevoie de:

  1. Un tabel cu cursurile valutare, unde sunt indicate datele în care cursul a fost valabil.
  2. Un tabel cu calendarul, unde sunt marcate weekend-urile și zilele de sărbătoare.

Ideea interogării este — pentru fiecare tranzacție — să găsești data cursului maxim care nu depășește data tranzacției și care este o zi lucrătoare.

Exemplu în 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
;

Astfel, pentru fiecare tranzacție, se selectează cursul cu data maximă care nu depășește data tranzacției și care este o zi lucrătoare (fără weekend și fără sărbătoare).