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

49. Периоды, когда товар закончился на всех складах

Сложная

Каждое утро в stock_snapshots пишется остаток SKU на каждом складе. Если в какой-то день по SKU нет ни одной строки, считаем, что товара в этот день не было нигде.

Товар «закончился», если суммарный остаток по всем складам за день равен нулю. Для каждого SKU из таблицы найдите периоды с 1 по 14 декабря 2025 года длиной не меньше трёх дней подряд, когда товар закончился: sku, from_date, to_date, days. Порядок — по sku, from_date.

В работе: Оценка упущенной выручки: сколько дней подряд покупатель видел «нет в наличии».

Таблицы

stock_snapshots — утренний снимок остатков

КолонкаТипЧто значит
skuintтовар
warehousetextсклад
snap_datedateдата снимка
qtyintостаток, штук

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

stock_snapshots · 14 строк

skuwarehousesnap_dateqty
501Хоругвино2025-12-0112
501Хоругвино2025-12-0212
501Хоругвино2025-12-0312
501Хоругвино2025-12-040
501Хоругвино2025-12-050
501Хоругвино2025-12-060
501Хоругвино2025-12-070
501Хоругвино2025-12-0812
501Хоругвино2025-12-0912
501Хоругвино2025-12-100
501Хоругвино2025-12-1112
501Хоругвино2025-12-1212
501Хоругвино2025-12-1312
501Хоругвино2025-12-1412

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

skufrom_dateto_datedays
5012025-12-042025-12-074
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 4 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
sku, from_date, to_date, days
пропуски и островадатыLEFT JOINGROUP BYHAVING

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

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