Добрый день. БД PostgreSQL, есть примерно такая табличка appointments, в которой перечислены посещения клиентов:
═════════╦════════╦══════╦══════╦═════╦════╦═════
appointment_id║ customer_id ║ time_start║ invoice_id║ filial_id ║ status║ in_trash
═════════╩════════╩══════╩══════╩═════╩════╩═════
Есть задачка - найти всех новых (пришедших в этом году) клиентов. Ищу таким запросом:
SELECT apps.customer_id FROM appointments apps
WHERE apps.in_trash is not true and apps.status = 4 and apps.filial_id = 1
GROUP BY apps.customer_id
HAVING MIN(apps.time_start) BETWEEN '2024-01-01 00:00:00' AND '2024-12-31 23:59:59'
Очень смущает, что когда я хочу ограничить выдачу клиентов только теми, по посещениям которых были сформированы счета,
SELECT apps.customer_id FROM appointments apps
WHERE apps.in_trash is not true and apps.status = 4 and apps.filial_id = 1
and apps.invoice_id is not null
GROUP BY apps.customer_id
HAVING MIN(apps.time_start) BETWEEN '2024-01-01 00:00:00' AND '2024-12-31 23:59:59'
то получаю выборку
большую, чем в предыдущем запросе!
Подскажите, пожалуйста, в чём я ошибаюсь?