Клиенты с продажей в течение 30 дней после коммуникации

Используйте EXISTS для продажи после январской коммуникации в пределах 30 дней и DISTINCT для клиента. Продажи могут приходиться на февраль; ограничивать январём обе таблицы нельзя.

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

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

Используйте EXISTS для продажи после январской коммуникации в пределах 30 дней и DISTINCT для клиента. Продажи могут приходиться на февраль; ограничивать январём обе таблицы нельзя.

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

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

Условие

Найди всех клиентов в январе, у которых после коммуникации в течении 30 дней была хотя бы одна продажа.

sales

id customer_id amount sale_date [phone]

communications

id customer_id type comm_date partition_date 1 1 mail [phone] call [phone] call [phone] email [phone] sms [phone]

Ответ

Используйте EXISTS для продажи после январской коммуникации в пределах 30 дней и DISTINCT для клиента. Продажи могут приходиться на февраль; ограничивать январём обе таблицы нельзя.

Пусть речь о коммуникациях в январе заданного года, продажа должна быть строго позже и не позднее 30 дней. PostgreSQL:

SELECT DISTINCT c.customer_id
FROM communications c
WHERE c.comm_date >= :january_start
  AND c.comm_date < :february_start
  AND EXISTS (
    SELECT 1
    FROM sales s
    WHERE s.customer_id = c.customer_id
      AND s.sale_date > c.comm_date
      AND s.sale_date <= c.comm_date + INTERVAL '30 days'
  );

Параметры — начало января и февраля нужного года. Поле partition_date не заменяет дату события без дополнительного контракта. По повреждённым датам в примере нельзя вычислить конкретный список клиентов.

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

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

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

Подробнее