Войти Регистрация
Data base

70. Первый просроченный платёж по кредиту

Сложная

В schedule — график платежей по кредитам: дата и сумма. В payments — фактические поступления. Деньги гасят платежи по порядку: сначала самый старый долг, переплата идёт в счёт следующих.

Платёж с датой due_date просрочен, если к концу этого дня сумма всех поступлений меньше суммы графика по этот платёж включительно.

Отчёт строится на 30 июня 2026: платежи с датой позже не учитываются. Для каждого кредита из графика верните loan_id и first_overdue — дату первого просроченного платежа или пусто, если просрочки не было. Порядок по loan_id.

В работе: Расчёт дня выхода в просрочку для коллекшена и отчётности по кредитному портфелю.

Таблицы

schedule — график платежей

КолонкаТипЧто значит
loan_idintкредит
due_datedateдата платежа
amount_rubnumericсумма по графику, ₽

payments — поступления

КолонкаТипЧто значит
payment_idintключ
loan_idintкредит
paid_attimestampвремя поступления
amount_rubnumericсумма, ₽

Пример: данные

schedule · 7 строк

loan_iddue_dateamount_rub
12026-01-1510000
12026-02-1510000
12026-03-1510000
22026-01-105000
22026-02-105000
22026-07-105000
32026-04-017000

payments · 4 строки

payment_idloan_idpaid_atamount_rub
112026-01-14T09:00:0010000
212026-02-15T15:30:0010000
312026-03-20T10:00:0010000
422026-01-05T12:00:0010000

Ожидаемый ответ

loan_idfirst_overdue
12026-03-15
2NULL
32026-04-01
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 5 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
loan_id, first_overdue
нарастающий итогоконные функциидатыLEFT JOIN

Источник: на данных Т-Банка: график платежей и фактические оплаты по кредитам. Условие пересказано своими словами.

Давали на собеседовании? Ответов пока мало — ваш поможет.