🔥 Live Coding: найти пользователей с заказами 3 дня подряд

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

Таблица orders: • user_id • order_id • order_time

Решение:

with ww1 as ( select user_id, toDate(order_time) as order_day, lead(toDate(order_time), 1) over ( partition by user_id order by toDate(order_time), order_id ) as next_day_1, lead(toDate(order_time), 2) over ( partition by user_id order by toDate(order_time), order_id ) as next_day_2 from orders )

select distinct user_id from ww1 where next_day_1 = order_day + 1 and next_day_2 = order_day + 2

🧠 Как здесь думаем:

Сначала приводим время заказа к дате, чтобы работать именно по дням.

Дальше с помощью lead смотрим: • какой день идет следующим • какой день идет через один

Если для строки: • next_day_1 = текущий день + 1 • next_day_2 = текущий день + 2

значит пользователь делал заказы 3 дня подряд ✅

⚠️ Где можно ошибиться:

Если у пользователя в один день несколько заказов, могут появиться лишние строки. Поэтому в финале лучше взять distinct user_id.

🎯 Вывод:

Это удобный способ искать последовательности событий без self join. Запрос получается компактным и читаемым.

🔥 Live Coding: найти пользователей с заказами 3 дня подряд
Задача:
Нужно найти userid пользователей, которые делали заказ 3 дня подряд | Сетка — социальная сеть от hh.ru