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

52. Баланс упал вдвое за неделю

Средняя

Каждую ночь в balances_daily выгружается остаток на счёте клиента. Иногда выгрузка не отрабатывает, и снимка за день нет.

Найдите дни, когда balance_rub не больше 50 % от остатка ровно 7 календарных дней назад. Если снимка за тот день нет, день не сравниваем. Остаток неделю назад должен быть больше нуля.

Верните client_id, snap_date, balance_week_ago, balance_rub. Порядок — по client_id, затем snap_date.

В работе: Ранний сигнал оттока: клиент выводит деньги в другой банк.

Таблицы

balances_daily — один снимок на клиента в день, бывают пропуски

КолонкаТипЧто значит
client_idintклиент
snap_datedateдата снимка
balance_rubnumericостаток

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

balances_daily · 20 строк

client_idsnap_datebalance_rub
12026-03-01120000
12026-03-02118000
12026-03-0390000
12026-03-0480000
12026-03-0580000
12026-03-0680000
12026-03-0780000
12026-03-0859000
12026-03-0960000
12026-03-1045000
22026-03-0130000
22026-03-0230000
22026-03-0330000
22026-03-0430000
22026-03-0530000
22026-03-0630000
22026-03-0730000
22026-03-0830000
22026-03-0930000
22026-03-1030000

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

client_idsnap_datebalance_week_agobalance_rub
12026-03-0812000059000
12026-03-109000045000
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 4 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
client_id, snap_date, balance_week_ago, balance_rub
оконные функциидатыJOIN

Источник: на данных Сбера, по мотивам открытой подборки вопросов. Условие пересказано своими словами.

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