Sobes.tech
Middle

Come implementare una query con la data massima del tasso di cambio per ogni transazione, considerando fine settimana e giorni festivi?

sobes.tech AI

Risposta dell'AI

Per implementare la query che, per ogni transazione, seleziona il tasso con la data massima, considerando weekend e festività, è necessario:

  1. Avere una tabella con i tassi di cambio, dove sono indicate le date in cui il tasso era valido.
  2. Avere una tabella con il calendario, dove sono segnati i fine settimana e i giorni festivi.

L'idea della query è — per ogni transazione — trovare la data del tasso massimo che non supera la data della transazione e che è un giorno lavorativo.

Esempio in 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
;

In questo modo, per ogni transazione, si seleziona il tasso con la data massima che non supera la data della transazione e che è un giorno lavorativo (non weekend e non festività).