В schedule — график платежей по кредитам: дата и сумма. В payments — фактические поступления. Деньги гасят платежи по порядку: сначала самый старый долг, переплата идёт в счёт следующих.
Платёж с датой due_date просрочен, если к концу этого дня сумма всех поступлений меньше суммы графика по этот платёж включительно.
Отчёт строится на 30 июня 2026: платежи с датой позже не учитываются. Для каждого кредита из графика верните loan_id и first_overdue — дату первого просроченного платежа или пусто, если просрочки не было. Порядок по loan_id.
В работе: Расчёт дня выхода в просрочку для коллекшена и отчётности по кредитному портфелю.
Таблицы
schedule — график платежей
| Колонка | Тип | Что значит |
|---|---|---|
loan_id | int | кредит |
due_date | date | дата платежа |
amount_rub | numeric | сумма по графику, ₽ |
payments — поступления
| Колонка | Тип | Что значит |
|---|---|---|
payment_id | int | ключ |
loan_id | int | кредит |
paid_at | timestamp | время поступления |
amount_rub | numeric | сумма, ₽ |
Пример: данные
schedule · 7 строк
| loan_id | due_date | amount_rub |
|---|---|---|
| 1 | 2026-01-15 | 10000 |
| 1 | 2026-02-15 | 10000 |
| 1 | 2026-03-15 | 10000 |
| 2 | 2026-01-10 | 5000 |
| 2 | 2026-02-10 | 5000 |
| 2 | 2026-07-10 | 5000 |
| 3 | 2026-04-01 | 7000 |
payments · 4 строки
| payment_id | loan_id | paid_at | amount_rub |
|---|---|---|---|
| 1 | 1 | 2026-01-14T09:00:00 | 10000 |
| 2 | 1 | 2026-02-15T15:30:00 | 10000 |
| 3 | 1 | 2026-03-20T10:00:00 | 10000 |
| 4 | 2 | 2026-01-05T12:00:00 | 10000 |
Ожидаемый ответ
| loan_id | first_overdue |
|---|---|
| 1 | 2026-03-15 |
| 2 | NULL |
| 3 | 2026-04-01 |
SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
loan_id, first_overdue
Источник: на данных Т-Банка: график платежей и фактические оплаты по кредитам. Условие пересказано своими словами.
Посмотреть данные, проверить кусок запроса. На зачёт не влияет.
Здесь появится результат отправки.