将代表电子邮件的行编织成send&回复谈话线程

时间:2016-08-25 14:01:33

标签: sql sql-server-2012

我在应用程序中有患者和医生之间交换的SENT和RECEIVED电子邮件消息(两个)表。我需要将这些行分组到会话线程中,就像您希望在电子邮件收件箱中看到它们一样,但有以下区别:

此处,“thread”包含相同2个用户之间的所有来回交换。因此,每个唯一的唯一通信用户对构成1个且仅1个线程。

以下概念验证代码成功地为单个实例创建了“线程”概念,其中我知道特定患者和医生用户ID。我无法弄清楚的部分是:

(1)当我从桌子上拉出多名病人和医生时,如何实现这一点,然后

(2)通过initiating-date

对结果线程进行排序
SELECT send.MessageContent, send.SentDatetime, rec.ReadDatetime, other_stuff
FROM MessageSend send
INNER JOIN MessageReceive rec 
ON send.MessageId = rec.MessageId
WHERE
( send.UserIdSender = 123
OR rec.UserIdReceiver = 123 )
AND
(send.UserIdSender = 456
OR rec.UserIdReceiver = 456)

1 个答案:

答案 0 :(得分:0)

如果MessageID对于转换是唯一的,您可以使用发送和接收的日期时间来订购消息。 如果您想过滤特定的医生或患者,您可以将其包含在where子句中。

SELECT send.MessageContent, send.SentDatetime, rec.ReadDatetime, other_stuff
FROM MessageSend send
  INNER JOIN MessageReceive rec 
     ON send.MessageId = rec.MessageId
ORDER BY   send.MessageId,send.SentDatetime, rec.ReadDatetime