获取每个对话的第一条消息

时间:2013-10-18 17:55:26

标签: sql sql-server sql-server-2008 database-design stored-procedures

我有一个表来存储在xmpp服务中发送的所有消息。我正在寻找创建一个查询来获取所有对话及其第一条消息(如聊天记录中的whatsapp)。

这是我的桌子。

enter image description here

FromPersonIdToPersonId是人们的ids。我所做的是,例如,我想看到personId = 643

的所有对话
SELECT DISTINCT MA.FromPersonId, MA.ToPersonId, MAX(MA.SENTDATE) AS [Date], Body
    FROM MessageArchive AS MA
    WHERE MA.FromPersonId = @personId OR MA.ToPersonId = @personId
    GROUP BY MA.FromPersonId, MA.ToPersonId, Body
    ORDER BY [Date] DESC

以上就是我所拥有的。结果是

enter image description here

如您所见,结果是针对同一个对话。但是无法区分那是同一个对话因为是同一个人而是处于不同的位置。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

您错过了644到643的消息,假设它存在,我建议将ROW ID设置为自动增量,此列可以为您提供有关哪些记录首先记录以及记录后记录的确切信息,此外,您如何识别消息是一样的吗?

答案 1 :(得分:0)

您缺少一个'conversation'表,其中conversationID字段是MessageArchive表中的外键,表示对话实体和消息实体之间存在的“一对多”关系:一个对话至少保留一条消息,每条消息都与一个且只有一个消息相关。

使用这样的数据库模型,您将能够收集每个对话的“前1”消息。

相关问题