Оба ваших запроса на самом деле неверны: вы выбираете id
, но это не является частью предложения group by
, поэтому вы в основном получаете случайное значение из группы. В большинстве RDBMS (и в не древних версиях MySQL) это приведет к синтаксической ошибке.
Я понимаю, что вы хотите посчитать, сколько (telephone, project_id, create_time, trace_content)
встречается в таблице более одного раза.
Для этого можно использовать два уровня агрегирования:
select count(*) cnt_duplicates
from (
select 1
from mytable
where create_time >= '2020-01-16' and create_time < '2020-01-17'
group by telephone, project_id, create_time, trace_content
having count(*) > 1
) t
Внутренний запрос группирует записи и фильтры по тем, которые встречаются более чем на одном. Внешний запрос подсчитывает, сколько записей было возвращено внутренним запросом.
Обратите внимание, что я переписал ваше условие на дату, чтобы он мог воспользоваться индексом на create_time
, если таковой имеется.