Используйте NOT EXISTS с фильтром времени внутри подзапроса. Так попадут и клиенты без событий вообще, и клиенты, чьи события были только раньше заданного периода.
Даны таблицы clients (client_id, full_name, source_system) и client_events (event_id, client_id, event_type, created_at). Напиши запрос, который найдет клиентов без единого события за последние 30 дней.
Используйте 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) может ускорить проверку наличия событий.