В prices — история цен товара на складе: с даты start_date действует цена price_rub. Вид цены kind: R — обычная, P — промо. Пара (склад, товар, дата) уникальна.
Для каждой строки верните её поля и regular_price — цену последней R-строки того же товара на том же складе с датой не позже даты строки (для самой R-строки — её собственную цену). Если такой R-строки нет, regular_price — NULL.
Колонки: stock_id, prod_id, start_date, kind, price_rub, regular_price. Порядок — по stock_id, prod_id, start_date.
В работе: Расчёт глубины скидки в промо: от какой обычной цены считать «−20 %».
Таблицы
prices — история цен; ключа нет, уникальна тройка склад–товар–дата
| Колонка | Тип | Что значит |
|---|---|---|
stock_id | int | склад |
prod_id | int | товар |
start_date | date | цена действует с |
kind | char(1) | R — обычная, P — промо |
price_rub | numeric | цена |
Пример: данные
prices · 6 строк
| stock_id | prod_id | start_date | kind | price_rub |
|---|---|---|---|---|
| 1 | 1 | 2025-11-01 | R | 1000 |
| 1 | 1 | 2025-11-02 | P | 800 |
| 1 | 1 | 2025-11-03 | P | 700 |
| 1 | 1 | 2025-11-04 | R | 1100 |
| 1 | 1 | 2025-11-05 | P | 900 |
| 1 | 1 | 2025-11-06 | R | 1200 |
Ожидаемый ответ
| stock_id | prod_id | start_date | kind | price_rub | regular_price |
|---|---|---|---|---|---|
| 1 | 1 | 2025-11-01 | R | 1000 | 1000 |
| 1 | 1 | 2025-11-02 | P | 800 | 1000 |
| 1 | 1 | 2025-11-03 | P | 700 | 1000 |
| 1 | 1 | 2025-11-04 | R | 1100 | 1100 |
| 1 | 1 | 2025-11-05 | P | 900 | 1100 |
| 1 | 1 | 2025-11-06 | R | 1200 | 1200 |
SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
stock_id, prod_id, start_date, kind, price_rub, regular_price
Источник: задача о последней цене (Postgres Professional, Хабр, 2021); кандидат пишет, что похожую давали в Ozon. Условие пересказано своими словами.
Посмотреть данные, проверить кусок запроса. На зачёт не влияет.
Здесь появится результат отправки.