【发布时间】:2013-10-18 17:55:25
【问题描述】:
我有一张表来存储在 xmpp 服务内发送的所有消息。我希望创建一个查询来获取所有对话及其第一条消息(例如聊天日志中的 whatsapp)。
这是我的桌子。
FromPersonId 和 ToPersonId 是人们的 ID。我所做的是,例如我想查看 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
以上是我所拥有的。结果是
如您所见,结果是相同的对话。但无法区分那是同一个对话,因为是同一个人但处于不同的位置。
我该如何解决这个问题?
【问题讨论】:
-
那么,每一行都是这样重复的吗?将“from”和“to”颠倒存储相同的对话有什么意义?这是您的应用程序的错误吗?
-
可以使用类似 CASE WHEN FromPersonId
-
另外,我将提出 Lamak 所说的关于他们在同一毫秒内相互发送相同消息的说法,但我认为这是测试数据,您的问题更侧重于如何对这些数据进行分组两行一起作为一个对话。
-
我们只是没有在您的屏幕截图中看到 644 到 643 的片段吗?
-
当我查看您的示例数据时,我看不到第二个查询结果来自哪里。无论如何,根据您定义对话的方式,您可能没有足够的数据来完成此操作..
标签: sql sql-server sql-server-2008 database-design stored-procedures