Не уверен, что формулировка вопроса так ясна, как должна быть (это лучшее, что я мог придумать), но вот пример, чтобы прояснить ситуацию. У меня есть представление Chats
, которое должно обобщить историю разговоров между двумя людьми. Представление состоит из следующих столбцов: Sender
, Recipient
, Timestamp
, LatestMessage
и UnreadMessageCount
.
Все столбцы представления Chats
получены из таблицы Direct_Messages
, в которой хранятся сведения об отдельных сообщениях чата, которыми обмениваются пользователи системы. Вот его столбцы:
ID
, Sender
, Recipient
, Body
, Timestamp
, TimeRead
(равно нулю, если сообщение не было прочитано получателем). Столбцы Timestamp
и LatestMessage
представления имеют значения самого последнего прямого сообщения между двумя участниками (самое последнее - Timestamp
FWIW).
Проблема действительно связана с тем фактом, что должна существовать только одна перестановка составных столбцов Sender
, Recipient
в представлении Chats
, т. Е. В последнем обмене между двумя участниками , Например, если Гэри отправил сообщение «Привет» Барри, то Барри ответил «Привет» - единственная запись в Chats
между этими двумя парнями должна иметь Sender
как «Барри», Recipient
как 'Gary', Timestamp
как отметка времени ответа Барри, LatestMessage
как 'Привет' и UnreadMessageCount как количество сообщений, которые Recipient
не прочитал.
Я пытался использовать GROUP BY "Sender", "Recipient" OR "Recipient", "Sender"
, но он просто возвращает два столбца: один сгруппирован по Барри, Гэри; и другой сгруппированный по Гари, Барри
Вот мой код:
SELECT Sender AS Sender,
Recipient AS Recipient,
Timestamp AS Timestamp,
Body AS LatestMessage,
(SUM(CASE WHEN TimeRead IS NULL THEN 1 ELSE 0 END) ) AS UnreadMessageCount
FROM Direct_Messages
GROUP BY Sender, Recipient OR Recipient, Sender
ORDER BY Timestamp DESC
РЕДАКТИРОВАТЬ: Вот пример данных в таблице Direct_Messages
и соответствующий вывод в представлении Chats
С Direct_Messages
ID Sender Recipient Body Timestamp TimeRead
148567984 Gary Barry Hi 2018-12-12 23:53:39.487 2018-12-12 23:55:45
1668701120 Barry Gary Hello 2018-12-12 23:54:49.326 NULL
Результат в Chats
:
Sender Recipient Timestamp LatestMessage UnreadMessageCount
Gary Barry 2018-12-12 23:53:39.487 Hi 0
Barry Gary 2018-12-12 23:54:49.326 Hello 1