SQL: компании без транзакций за последние 30 дней

Вывести компании без единой транзакции за последние 30 дней, используя JOIN, без подзапроса в WHERE.

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

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

Вывести компании без единой транзакции за последние 30 дней, используя JOIN, без подзапроса в WHERE.

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

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

Условие

Вывести компании без единой транзакции за последние 30 дней, используя JOIN, без подзапроса в WHERE.

Решение на PostgreSQL

Ниже «последние 30 дней» — скользящий интервал до текущего момента, а transaction_id — NOT NULL ключ транзакции.

SELECT c.*
FROM companies c
LEFT JOIN transactions t
  ON c.company_id = t.company_id
  AND t.transaction_date >= CURRENT_TIMESTAMP - INTERVAL '30 days'
  AND t.transaction_date <= CURRENT_TIMESTAMP
WHERE t.transaction_id IS NULL;

Если в периоде нет транзакций, правая часть соединения заполнена NULL, и компания остаётся в результате. Компании без транзакций вообще также будут показаны.

Фильтрация правой таблицы по датам в WHERE после LEFT JOIN убрала бы нужные строки без совпадений. Для требования о календарных днях, а не последних 30 сутках, нужно отдельно определить границы и часовой пояс.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку