Короткий ответ Нужно сгруппировать заказы по клиенту, посчитать количество уникальных месяцев через COUNT(DISTINCT DATE_TRUNC('month', order_date)) и отфильтровать группы, где это число больше или равно 3, через HAVING. Как это работает подробнее COUNT(DISTINCT ...) внутри группы считает не общее количество заказов, а число уникальных значений выражения — в данном случае уникальных «месяцев» заказа у этого клиента. HAVING затем сравнивает это число с порогом. Пример кода Что использовать на практике На практике: такой запрос — простой способ отличить «активного» клиента, который возвращается в разные месяцы, от клиента, сделавшего много заказов за один день. Важно использовать именно DATE_TRUNC (или аналог), а не просто order_date, иначе каждая отдельная дата будет считаться отдельным «месяцем». Результат: Результат — только клиенты с заказами в 3+ разных месяцах. Проверка: для одного найденного клиента вывести SELECT DISTINCT DATE_TRUNC('month', order_date) FROM orders WHERE customer_id = ... и убедиться, чт