MySQL每次匹配仅选择1

时间:2011-12-20 14:10:07

标签: mysql

我有一个包含5行的MySQL表:

email
message_id
date
time

我想计算每天的电子邮件数量。

到目前为止,我有这个

SELECT Date,COUNT(*) AS Num FROM mail2_mailing_log WHERE Id_message=@Id GROUP BY Date ORDER BY Date DESC

但是我们发现脚本存在问题并且许多数据成倍增加(之后已经修复),但我希望能够使用我拥有的数据。

所以基本上我想要“合并”每个电子邮件,日期和时间匹配的所有行,然后按日期分组并计算项目数。

3 个答案:

答案 0 :(得分:2)

使用distinct关键字:

SELECT DISTINCT Date,COUNT(*) AS Num FROM mail2_mailing_log WHERE Id_message=@Id GROUP BY Date ORDER BY Date DESC

答案 1 :(得分:2)

SELECT q.date, COUNT(*)
    FROM (SELECT DISTINCT email, date, time
              FROM mail2_mailing_log
              WHERE Id_Message = @Id) q
    GROUP BY q.date
    ORDER BY q.date DESC

答案 2 :(得分:1)

如果Date列也包含时间,则需要使用DATE_FORMAT()函数格式化Date列。

SELECT DATE_FORMAT(Date, '%W %M %Y'),COUNT(*) AS Num FROM mail2_mailing_log
WHERE Id_message=@Id GROUP BY DATE_FORMAT(Date, '%W %M %Y')
ORDER BY DATE_FORMAT(Date, '%W %M %Y') DESC