Middle
Hoe implementeer je een query met de maximale wisselkoersdatum voor elke transactie, rekening houdend met weekends en feestdagen?
sobes.tech AI
Antwoord van AI
Om de query te implementeren die voor elke transactie de koers met de maximale datum selecteert, rekening houdend met weekends en feestdagen, heb je nodig:
- Een tabel met wisselkoersen, waar de data worden aangegeven waarop de koers geldig was.
- Een tabel met de kalender, waar weekends en feestdagen gemarkeerd zijn.
Het idee van de query is — voor elke transactie — de maximale koersdatum te vinden die niet later is dan de transactie datum en die een werkdag is.
Voorbeeld 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
;
Op deze manier wordt voor elke transactie de koers met de maximale datum geselecteerd die niet later is dan de transactie datum en die een werkdag is (geen weekend en geen feestdag).