1

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

这是我的桌子。

在此处输入图像描述

FromPersonId并且ToPersonId是人的身份证。我所做的是,例如我想查看 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

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

在此处输入图像描述

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

我怎样才能解决这个问题?

4

2 回答 2

0

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

于 2013-10-19T01:48:53.973 回答
0

您缺少一个“对话”表,其中一个对话ID 字段是您的 MessageArchive 表中的外键,作为对话实体和消息实体之间存在的“一对多”关系的表现:一个对话至少持有一条消息,并且每条消息都与一个且只有一个会话相关。

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

于 2013-10-19T06:32:50.337 回答