Sobes.tech
Middle

Comment implémenter une requête avec la date maximale du taux de change pour chaque transaction en tenant compte des weekends et des jours fériés?

sobes.tech IA

Réponse de l'IA

Pour implémenter la requête qui, pour chaque transaction, sélectionne le taux avec la date maximale, en tenant compte des weekends et des jours fériés, il faut :

  1. Avoir une table avec les taux de change, indiquant les dates auxquelles le taux était valable.
  2. Avoir une table avec le calendrier, où sont marqués les weekends et les jours fériés.

L'idée de la requête est — pour chaque transaction — de trouver la date de taux maximale qui ne dépasse pas la date de la transaction et qui est un jour ouvrable.

Exemple 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
;

Ainsi, pour chaque transaction, la requête sélectionne le taux avec la date maximale qui ne dépasse pas la date de la transaction et qui est un jour ouvrable (pas un weekend ni un jour férié).