Sobes.tech
Middle

¿Cómo implementar una consulta con la fecha máxima del tipo de cambio para cada transacción, teniendo en cuenta los fines de semana y días festivos?

sobes.tech AI

Respuesta de la IA

Para implementar la consulta que, para cada transacción, selecciona la tasa con la fecha máxima, considerando fines de semana y días festivos, se necesita:

  1. Tener una tabla con las tasas de cambio, donde se indiquen las fechas en que la tasa fue vigente.
  2. Tener una tabla con el calendario, donde se marquen los fines de semana y días festivos.

La idea de la consulta es — para cada transacción — encontrar la fecha de tasa máxima que no supere la fecha de la transacción y que además sea un día laborable.

Ejemplo en 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
;

De esta forma, para cada transacción se selecciona la tasa con la fecha máxima que no sea posterior a la fecha de la transacción y que además sea un día laborable (no fin de semana ni festivo).