SQL - 需要一个查询来获取用户所属的每个线程中的最新消息

时间:2012-03-29 05:58:38

标签: sql tsql messaging

在我的应用中,“消息线程”被定义为两个或更多用户之间的所有消息,并且不是嵌套的。它需要像Facebook消息一样工作。

我需要一个查询,该查询生成所有“消息线程”的列表,其中用户是其成员,按最近活动的线程排序,降序。结果是一个不同线程的表,其中每一行包含threadID,postDate和messageBody。

这是我的架构:

MessageThreads (threadID,lastPostDate)
MessageThreadUsers (threadFK,userFK)
消息(messageID,threadFK,senderFK,postDate,messageBody)
用户(userID,userName,userEmail,...)

首先,此查询为我提供了来自用户所在线程的所有消息:

SELECT * FROM MessageThreadUsers
JOIN Messages ON MessageThreadUsers.threadFK = Messages.threadFK
WHERE MessageThreadUsers.userFK = 'usr_developer'
ORDER BY messageDate DESC

但是我怎么才会得到最新的?我想我会使用MAX(messageDate)函数,但是这样在JOIN中是如何工作的呢?我如何为每个线程提取包含消息数据的单行?

如果您可以在TSQL中发布您的答案,这将有所帮助,但任何帮助表示赞赏。谢谢!

2 个答案:

答案 0 :(得分:0)

如果你有正确的订单,你应该通过添加:

获得“最高点”
LIMIT 1

答案 1 :(得分:0)

事实证明这并不像我原先想象的那么困难。因为最新的发布日期存储在线程中,所以我不必在Messages表中的messageDate上进行聚合。这是我的疑问:

SELECT DISTINCT 
    MessageThreadUsers.threadFK, 
    MessageThreads.threadDate, 
    [Messages].MessageBody, 
    [Messages].senderFK,
    Users.userFullName
FROM MessageThreadUsers
JOIN MessageThreads ON MessageThreadUsers.threadFK = MessageThreads.threadID
JOIN Messages ON MessageThreads.threadDate = Messages.messageDate
JOIN Users ON Messages.senderFK = Users.userID
WHERE userFK = 'usr_developer'