Sobes.tech
Middle

Ինչպե՞ս իրականացնել հարցում՝ հաշվի առնելով հանգստյան օրերը և տոները՝ յուրաքանչյուր գործարքի համար առավելագույն փոխարժեքի ամսաթիվը։

sobes.tech AI

Պատասխան AI-ից

Յուրաքանչյուր գործարքի համար, հաշվի առնելով հանգստյան օրերը և տոները, անհրաժեշտ է ընտրել առավելագույն ամսաթվով փոխարժեքը՝

  1. ունենալ փոխարժեքների աղյուսակ, որտեղ նշված են այն օրերը, երբ փոխարժեքը եղել է գործող։
  2. ունենալ օրացույցի աղյուսակ, որտեղ նշված են հանգստյան օրերը և տոները։

Հարցի գաղափարը՝ յուրաքանչյուր գործարքի համար գտնել առավելագույն փոխարժեքի ամսաթիվը, որը չի գերազանցում գործարքի ամսաթիվը և հանդիսանում է աշխատանքային օր։

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
;

Այս կերպ, յուրաքանչյուր գործարքի համար ընտրվում է առավելագույն ամսաթվով փոխարժեքը, որը չի անցնում գործարքի ամսաթվից և հանդիսանում է աշխատանքային օր (ոչ հանգստյան օր և ոչ տոնական օր):