有两张桌子
Users:Id(PK int), Username(varchar (50))
Emails:Id(PK int), UserId(FK int), Subject(varchar(50)), Content(varchar(250)), SentAt(datetime)
我必须显示每个用户发送的电子邮件数量,按天分组,按当天发送的电子邮件总数排序。我最好举个例子:
Date |User |Total
---------|-----------|-------
2012-4-5 |username1 |7
2012-4-5 |username2 |2
2012-4-2 |username1 |3
2012-3-24|username1 |12
2012-3-24|username5 |2
我试过了,但显然它不起作用。
ALTER PROCEDURE spGetStatistics
AS
SELECT e.SentAt, u.Username, ( SELECT COUNT(*) FROM Emails e2 WHERE e2.SentAt=e.SentAt AND e2.UserID=u.UserID ) AS Total
FROM Emails e INNER JOIN Users u ON e.UserID=u.UserID
GROUP BY e.SentAt
ORDER BY Total
乐:
Using the solution provided by Adrian which is:
SELECT CAST (e.SentAt AS date), u.Username, COUNT(*) AS Total
FROM Emails e INNER JOIN Users u ON e.UserID=u.UserID
GROUP BY CAST (e.SentAt AS date), u.Username
ORDER BY Total
I got this:
Date |User |Total
-----------|-----------|-------
2012-09-08 |username1 |1
2012-09-07 |username2 |2
2012-09-08 |username2 |2
instead of
Date |User |Total
-----------|-----------|-------
2012-09-08 |username2 |2
2012-09-08 |username1 |1
2012-09-07 |username2 |2
It seems to be working like this:
SELECT CAST (e.SentAt AS date), u.Username, COUNT(*) AS Total
FROM Emails e INNER JOIN Users u ON e.UserID=u.UserID
GROUP BY CAST (e.SentAt AS date), u.Username
ORDER BY CAST (e.SentAt AS date) DESC, Total DESC