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:
- Ter uma tabela com as taxas de câmbio, onde são indicadas as datas em que a taxa foi válida.
- 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).