我想查询一个主题列表,每个会话都显示最新消息max(date)
,以及对话count(*), group by threadID
中的消息数量。
这是SQL表
Message
-------------
messageID (int)
subject (varchar)
...
date (date)
threadID (guid)
如何在一个查询中生成以下内容?在Gmail中的线程视图中?
或者数据结构错了吗?也许我应该将所需数据反规范化为Thread
表?利用触发器更新最后一条消息ID并计算?
谢谢!
更新 我还需要'max([date])'的主题,并按最后一条消息的日期订购帖子,谢谢!
答案 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