Задача #3

Найдите предыдущий заказ клиента через LAG, вычислите разницу дат и оставьте клиентов, чей максимальный разрыв превышает 60 дней.

Короткий ответ

Что ответить на собеседовании

Найдите предыдущий заказ клиента через LAG, вычислите разницу дат и оставьте клиентов, чей максимальный разрыв превышает 60 дней.

Подробный разбор

Ответ с пояснениями

Условие

Задача #3 Нужно найти клиентов, у которых разрыв между их заказами > 60 дней. Для указанных клиентов вывести максимальный разрыв (gap_days).

Orders table:

order_id customer_id order_dt
1 1 [phone]
2 1 [phone]
3 1 [phone]
4 1 [phone]
5 2 [phone]
6 2 [phone]
7 3 [phone]

Финальный результат:

customer_id gap_days
1 123
2 120

Ответ

Найдите предыдущий заказ клиента через LAG, вычислите разницу дат и оставьте клиентов, чей максимальный разрыв превышает 60 дней.

Для PostgreSQL, если order_dt имеет тип date:

WITH gaps AS (
    SELECT customer_id,
           order_dt - LAG(order_dt) OVER (
               PARTITION BY customer_id
               ORDER BY order_dt, order_id
           ) AS gap_days
    FROM Orders
)
SELECT customer_id, MAX(gap_days) AS gap_days
FROM gaps
GROUP BY customer_id
HAVING MAX(gap_days) > 60;

Первый заказ даёт NULL и не влияет на MAX; клиент с одним заказом не попадёт в результат. В исходных данных даты заменены маркерами, поэтому конкретные значения 123 и 120 проверить нельзя, но запрос решает указанную задачу.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее