Добро пожаловать в S / O, и у вас есть хороший вопрос, запутывающий несколько, но вы привели хороший пример, что вы не хотите IP, если это было то же имя / фамилия. Чтобы получить то, что вы ищете, вам нужно самостоятельно присоединиться к той же таблице журналов, но и к тем же таблицам участников, чтобы у вас была возможность сопоставления сначала по IP, а затем сравнили имя / фамилию каждого человека, чтобы они могут быть исключены, если это необходимо.
Это не идеально, но это действительно то, что вы ищете по образцам данных, без специальной фильтрации по одному IP-адресу.
select
l1.ip_address,
group_concat(distinct l1.member_id order by l1.member_id ) UniqueMembers,
count(*) NumberOfMembers
from
logs l1
JOIN members m1
on l1.member_id = m1.id
join logs l2
on l1.ip_address = l2.ip_address
AND l1.member_id != l2.member_id
join members m2
on l2.member_id = m2.id
AND m1.name != m2.name
AND m1.surname != m2.surname
group by
l1.ip_address
Я используя l1 и l2 для соответствующих псевдонимов «Logs» и m1 и m2 для «членов». Итак, я начинаю с того же ID члена от l1 до m1. Затем из первой таблицы журнала во вторую на основе IP-адреса и должен быть другой идентификатор участника (зачем сравнивать одного и того же человека по одному и тому же идентификатору участника). Теперь я могу присоединиться к l2 и m2 по его идентификатору участника и исключить его, если имена m1 и m2 совпадают, поскольку имеют право на! = Для имени и фамилии.
Должно значительно приблизить вас к тому, что вы ищете.