Даны таблицы clients (client_id, full_name, source_system) и client_events (event_id, client_id, event_type, created_at). Напиши запрос, который найдет клиентов без единого события за последние 30 дней.

Используйте NOT EXISTS с фильтром времени внутри подзапроса. Так попадут и клиенты без событий вообще, и клиенты, чьи события были только раньше заданного периода.

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

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

Используйте NOT EXISTS с фильтром времени внутри подзапроса. Так попадут и клиенты без событий вообще, и клиенты, чьи события были только раньше заданного периода.

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

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

Используйте NOT EXISTS с фильтром времени внутри подзапроса. Так попадут и клиенты без событий вообще, и клиенты, чьи события были только раньше заданного периода.

В PostgreSQL, если нужен интервал последних 30 суток до текущего момента:

SELECT c.client_id, c.full_name, c.source_system
FROM clients AS c
WHERE NOT EXISTS (
    SELECT 1
    FROM client_events AS e
    WHERE e.client_id = c.client_id
      AND e.created_at >= CURRENT_TIMESTAMP - INTERVAL '30 days'
      AND e.created_at <= CURRENT_TIMESTAMP
);

Верхняя граница исключает ошибочные будущие события. Уточните часовую зону и требование календарных дней. Составной индекс (client_id, created_at) может ускорить проверку наличия событий.

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

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

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

Подробнее