В ops — операции клиентов в рублях, долларах, евро и юанях. В rates — официальные курсы ЦБ: сколько рублей стоит единица валюты на дату. ЦБ не устанавливает курс на выходные и праздники, поэтому строк на эти даты нет. Для рубля строк в rates нет вовсе, его курс — 1.
Переведите каждую операцию в рубли по курсу на дату операции, а если на эту дату курса нет — по последнему курсу до неё. Округлите каждую операцию до копеек и сложите по клиенту. Если курса нет ни на дату, ни раньше, операцию в сумму не берите, а посчитайте в колонке skipped. Верните client_id, total_rub (0, если сложить нечего), skipped, порядок — по client_id.
В работе: Выписка для налоговой декларации: доходы в валюте пересчитывают по курсу ЦБ на дату получения.
Таблицы
ops — одна строка — одна операция
| Колонка | Тип | Что значит |
|---|---|---|
op_id | int | ключ |
client_id | int | клиент |
op_date | date | дата операции |
currency | text | RUB / USD / EUR / CNY |
amount | numeric | сумма в валюте операции |
rates — курсы ЦБ, только рабочие дни
| Колонка | Тип | Что значит |
|---|---|---|
currency | text | валюта |
rate_date | date | дата курса |
rub_per_unit | numeric | рублей за единицу |
Пример: данные
ops · 5 строк
| op_id | client_id | op_date | currency | amount |
|---|---|---|---|---|
| 1 | 1 | 2026-03-05 | USD | 120 |
| 2 | 1 | 2026-03-06 | EUR | 35,5 |
| 3 | 1 | 2026-03-06 | RUB | 4500 |
| 4 | 2 | 2026-03-06 | CNY | 1999,99 |
| 5 | 2 | 2026-03-06 | USD | 10,01 |
rates · 4 строки
| currency | rate_date | rub_per_unit |
|---|---|---|
| USD | 2026-03-05 | 81,2345 |
| USD | 2026-03-06 | 81,5012 |
| EUR | 2026-03-06 | 88,0731 |
| CNY | 2026-03-06 | 11,2264 |
Ожидаемый ответ
| client_id | total_rub | skipped |
|---|---|---|
| 1 | 17374,74 | 0 |
| 2 | 23268,52 | 0 |
SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
client_id, total_rub, skipped
Источник: наша задача на данных Т‑Банка: валютные операции и курсы ЦБ. Условие пересказано своими словами.
Посмотреть данные, проверить кусок запроса. На зачёт не влияет.
Здесь появится результат отправки.