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

44. Остаток товара на складах на конец каждого дня

Средняя

В stock_moves — журнал движений товара: приход на склад — положительный qty, отгрузка — отрицательный. Отдельной таблицы остатков нет.

Для SKU 1001 и каждого склада, где по нему были движения, верните остаток на конец каждого дня с 1 по 5 ноября 2025 года: warehouse, day (date), stock. Остаток включает все движения до конца этого дня, в том числе октябрьские. В днях без движений остаток переносится. Порядок — по warehouse, day.

В работе: Восстановление истории остатков, когда хранится только журнал операций склада.

Таблицы

stock_moves — одна строка — одно движение

КолонкаТипЧто значит
move_idintключ
warehousetextсклад
skuintтовар
moved_attimestampвремя
qtyint+ приход, − отгрузка

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

stock_moves · 7 строк

move_idwarehouseskumoved_atqty
1Хоругвино10012025-10-28T08:00:00120
2Хоругвино10012025-11-01T10:00:00-15
3Хоругвино10012025-11-01T18:00:00-7
4Хоругвино10012025-11-03T09:00:0050
5Казань10012025-11-02T07:00:0040
6Казань10012025-11-04T16:00:00-12
7Казань20022025-11-02T07:00:00500

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

warehousedaystock
Казань2025-11-010
Казань2025-11-0240
Казань2025-11-0340
Казань2025-11-0428
Казань2025-11-0528
Хоругвино2025-11-0198
Хоругвино2025-11-0298
Хоругвино2025-11-03148
Хоругвино2025-11-04148
Хоругвино2025-11-05148
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 4 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
warehouse, day, stock
нарастающий итогоконные функциидатыLEFT JOIN

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

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