Да, сначала начните с группировки user1, user2 и сообщения.Это дает вам уникальное сообщение для каждой пары:
SELECT case when recipient > sender then recipient else sender end user1,
case when recipient > sender then sender else recipient end user2,
message
FROM Messages
GROUP BY user1, user2, message
Затем из этой группы результатов по сообщению и возвращают только счетчик больше 1. Вы можете использовать вложенный запрос, чтобы сделать это:
SELECT message, COUNT(message)
FROM (SELECT case when recipient > sender then recipient else sender end user1,
case when recipient > sender then sender else recipient end user2,
message
FROM Messages
GROUP BY user1, user2, message) PairMessages
GROUP BY message
HAVING COUNT(message) > 1
Возможно, начните с этого теста:
INSERT INTO Users VALUES (1,'john',1111111111)
INSERT INTO Users VALUES (2,'paul',2222222222)
INSERT INTO Users VALUES (75,'george',7575757575)
INSERT INTO Users VALUES (83,'ringo',8383838383)
INSERT INTO Messages VALUES (2,1,GETDATE(),'Yesterday')
INSERT INTO Messages VALUES (1,2,GETDATE(),'hello')
INSERT INTO Messages VALUES (75,83,GETDATE(),'yellow')
INSERT INTO Messages VALUES (75,83,GETDATE(),'hello')
Вы сможете получить привет, поскольку ваше сообщение отправлено между более чем одной парой пользователей.
Редактировать: я обновилвыше с правильным ответом, чтобы показать, что каждая пара пользователей уникальна для каждого сообщения.Также может быть хорошей идеей создать groupID для каждой пары пользователей.Затем вы можете добавить столько пользователей, сколько хотите к этому groupID.Смотрите здесь для идеи: http://sqlfiddle.com/#!9/fbc2e2/3