У меня есть большой набор отправляемых электронных сообщений и коды состояния.Получить только последнюю строку, сгруппированную по столбцу
ID Recipient Date Status
1 [email protected] 01/01/2010 1
2 [email protected] 02/01/2010 1
3 [email protected] 01/01/2010 1
4 [email protected] 02/01/2010 2
5 [email protected] 03/01/2010 1
6 [email protected] 01/01/2010 1
7 [email protected] 02/01/2010 2
В этом примере:
- все письма, отправленные кого-то имеют статус
- средней электронной почты (по дате) отправляется их имеет статус , но последний -
- последнее сообщение, отправленное на других имеет статус
Что мне нужно, чтобы получить это подсчет всех писем, отправленных каждому человеку, и что код состояния последнее было.
Первая часть довольно проста:
SELECT Recipient, Count(*) EmailCount
FROM Messages
GROUP BY Recipient
ORDER BY Recipient
Который дает мне:
Recipient EmailCount
[email protected] 2
[email protected] 3
[email protected] 2
Как я могу получить самый последний код состояния тоже?
Конечный результат должен быть:
Recipient EmailCount LastStatus
[email protected] 2 1
[email protected] 3 1
[email protected] 2 2
Спасибо.
(Сервер Microsoft SQL Server 2008, запрос бежится через OleDbConnection в .Net)
Может ли быть получено несколько электронных писем одновременно? Как вы хотите справиться с ситуацией, когда два письма имеют одну и ту же дату, но разные статусы? –
Временная метка на самом деле имеет достаточно высокое разрешение, чтобы это не было проблемой, и даже если бы это было так, «любой SQL, возвращаемый с помощью ORDER BY», достаточно хорош. – Cylindric