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

53. Траты по карте за скользящие 30 дней

Средняя

В card_tx — списания по картам. Для каждой операции посчитайте sum_30d: сумму всех операций того же клиента, у которых tx_at от tx_at - 30 дней до tx_at текущей операции, обе границы включены.

Операции в одну и ту же секунду входят в окна друг друга. Верните tx_id, client_id, tx_at, amount_rub, sum_30d. Порядок — по client_id, tx_at, tx_id.

В работе: Лимиты и антифрод: месячный лимит трат считают по скользящему окну, а не по календарному месяцу.

Таблицы

card_tx — списания по картам

КолонкаТипЧто значит
tx_idintключ
client_idintклиент
tx_attimestampвремя
amount_rubnumericсумма

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

card_tx · 5 строк

tx_idclient_idtx_atamount_rub
112026-01-01T10:00:001000
212026-01-15T10:00:002000
312026-01-31T10:00:00500
412026-02-01T09:00:00700
522026-01-20T13:30:003500

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

tx_idclient_idtx_atamount_rubsum_30d
112026-01-01T10:00:0010001000
212026-01-15T10:00:0020003000
312026-01-31T10:00:005003500
412026-02-01T09:00:007003200
522026-01-20T13:30:0035003500
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 4 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
tx_id, client_id, tx_at, amount_rub, sum_30d
оконные функциинарастающий итогдаты

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

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