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

109. Двойные заказы от повторного нажатия

Средняя

MySQL · MySQL 8.4.6

Когда приложение долго отвечает, покупатель жмёт «Оформить» ещё раз, и в orders появляются два одинаковых заказа. Уникального ключа на (покупатель, товар, время) нет: гонку двух запросов он бы не поймал, время отличается на секунды.

Дубль — заказ того же buyer_id и sku, созданный не позже чем через 10 секунд после предыдущего такого заказа. Предыдущий — по created_at, при равном времени — по меньшему order_id. Первый заказ цепочки дублем не считается. Верните order_id дублей.

В работе: Ночная чистка перед передачей заказов на склад, чтобы не собирать одну посылку дважды.

Как проверяем Движка MySQL в браузере пока нет, поэтому здесь не запрос, а выбор решения. Выберите все верные варианты (одна лишняя отметка допустима). После ответа — почему каждый вариант верный или нет. Ответ один на подход: после него показываем разбор.
оконные функциидатыдедупликациясамосоединение

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

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

Какие запросы вернут дубли заказов?

  • Сравнение с первым заказом цепочки
  • Строго меньше 10 секунд
  • LAG по (buyer_id, sku) и разница ≤ 10 секунд
  • PARTITION BY buyer_id без sku
  • EXISTS: есть более ранний заказ в окне 10 секунд