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 секунд