Sobes.tech
Middle

Como implementar uma consulta com a data máxima da taxa de câmbio para cada transação, considerando fins de semana e feriados?

sobes.tech IA

Resposta da IA

Para implementar a consulta que, para cada transação, seleciona a taxa com a data máxima, considerando fins de semana e feriados, é necessário:

  1. Ter uma tabela com as taxas de câmbio, onde são indicadas as datas em que a taxa foi válida.
  2. Ter uma tabela com o calendário, onde são marcados os fins de semana e feriados.

A ideia da consulta é — para cada transação — encontrar a data de taxa máxima que não ultrapasse a data da transação e que seja um dia útil.

Exemplo em 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
;

Dessa forma, para cada transação, é selecionada a taxa com a data máxima que não seja posterior à data da transação e que seja um dia útil (não fim de semana nem feriado).