Вопрос SQL для просмотра цепочки электронной почты - PullRequest
0 голосов
/ 05 октября 2010

Я бы хотел запросить список тем, в каждом из которых показывалось последнее сообщение max(date), а также количество сообщений в разговоре count(*), group by threadID.

Вот таблица SQL

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

Как создать следующее в одном запросе? в виде темы, как в Gmail?

Или структура данных неверна? Может быть, мне следует перенести необходимые данные в таблицу Thread? Использовать триггер для обновления идентификатора последнего сообщения и количества?

Спасибо!

обновление Мне также нужна тема 'max ([date])', и упорядочить ветку по дате последнего сообщения, спасибо!

1 Ответ

3 голосов
/ 05 октября 2010

Предположим, 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...