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

问题描述:

在我的应用中,“消息线程”被定义为两个或多个用户之间的所有消息,并且不是嵌套的。它需要像Facebook消息一样工作。SQL - 需要一个查询来获取用户所属的每个线程中的最新消息

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

这里是我的架构:

MessageThreads(线程ID,lastPostDate)
MessageThreadUsers(threadFK,userFK)
消息(MESSAGEID,threadFK,senderFK,踵,消息体)
用户(userID,userName,userEmail,...)

要开始w ith,这个查询给我所有来自用户所在线程的消息:

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

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

这将有助于很多,如果你可以发布你的答案TSQL,但任何帮助表示赞赏。谢谢!

如果你有正确的顺序,则应该通过添加得到“最高命中”:

LIMIT 1 
+1

我在想,限制结果集将完成最后一组线程,因为我在MAX()会给我最新的帖子的页面结果。但是,这个答案并没有涉及到问题的核心问题,即:我如何只将来自线程的最新消息连接到线程列表中? – Redtopia 2012-03-29 13:41:02

事实证明,这是我首先想到的是并不困难。由于最新的发布日期存储在线程中,因此我不必在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'