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

98. Текущий статус возвратов Маркета

Средняя

В return_events — история статусов возвратов: created, in_transit, received, refunded, rejected. События иногда доезжают с опозданием, поэтому event_id не всегда растёт вместе с changed_at.

Текущий статус возврата — статус из события с наибольшим changed_at; при равном времени — с большим event_id.

Посчитайте, сколько возвратов сейчас в каждом статусе: status, returns. Порядок: по returns от большего, при равенстве по status.

В работе: Утренний дашборд службы возвратов: сколько посылок в пути и сколько ждут денег.

Таблицы

return_events — одна строка — смена статуса

КолонкаТипЧто значит
event_idintключ, порядок записи
return_idintвозврат
statustextновый статус
changed_attimestampкогда статус сменился

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

return_events · 8 строк

event_idreturn_idstatuschanged_at
19001created2026-05-01T10:00:00
29001in_transit2026-05-02T09:00:00
39001received2026-05-04T15:00:00
49002created2026-05-02T11:00:00
59002in_transit2026-05-03T08:00:00
69003created2026-05-03T12:00:00
79003in_transit2026-05-04T10:00:00
89004created2026-05-04T18:00:00

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

statusreturns
in_transit2
created1
received1
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 4 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
status, returns
дедупликацияоконные функцииGROUP BY

Источник: на данных Маркета: история статусов возвратов. Условие пересказано своими словами.

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