电子邮件线程视图的SQL问题

时间:2010-10-05 01:26:43

标签: sql sql-server coldfusion

我想查询一个主题列表,每个会话都显示最新消息max(date),以及对话count(*), group by threadID中的消息数量。

这是SQL表

Message
-------------
messageID (int)
subject (varchar)
...
date (date)
threadID (guid)

如何在一个查询中生成以下内容?在Gmail中的线程视图中?

或者数据结构错了吗?也许我应该将所需数据反规范化为Thread表?利用触发器更新最后一条消息ID并计算?

谢谢!

更新 我还需要'max([date])'的主题,并按最后一条消息的日期订购帖子,谢谢!

1 个答案:

答案 0 :(得分:3)

假设threadID是对话的唯一链接,除非我遗漏了某些内容,否则这应该有效:

SELECT threadID, count(messageID) as MessageCount, max([date]) as MaxDate
FROM Message
GROUP BY threadID

您可能还想更改date列名称,因为这是一个保留字。

需求更改的编辑

由于您尚未指定电子邮件主题是否可能更改(第一封电子邮件中的“嘿”可能是“RE:嘿”,第二封内容为响应),我已经做了一个子查询,所以你可以从您想要的Message表(M1)中提取任何信息。

SELECT M1.subject, M1.date, M2.MessageCount
FROM 
Message M1
INNER JOIN (
    SELECT threadID, count(messageID) as MessageCount, 
         max([date]) as MaxDate, max(messageID) as MaxMessageID
    FROM [Message]
    GROUP BY threadID
) M2 ON
M1.threadID = M2.threadID and M1.MessageID = M2.MaxMessageID
ORDER BY M1.[date] DESC