SELECT DISTINCT每个月内的计数条目。 MYSQL

时间:2015-12-08 17:05:01

标签: php mysql

您好我有一个数据库,其中包含一个包含电子邮件地址的列,第二列包含类别,第三列包含日期。

我想要做的是计算多个日期范围之间“A”类别中唯一电子邮件地址的数量。所以我有这个:

SELECT COUNT(DISTINCT email) as counter 
FROM table 
WHERE category = "A" AND date < "2015-12" AND date > "2015-11";

然后我将对第二个日期范围单独进行查询。

现在这是我的问题:

如果电子邮件地址在第一个月和第二个月出现,它将继续计算这两个月,因为它在我查询的范围内是唯一的。

如何创建一个查询,计算一年的唯一电子邮件地址,然后计算一个月内的不同条目,而不包括重复项?

谢谢!

2 个答案:

答案 0 :(得分:0)

如果您想要自定义日期,可以将值设置为vars

$custom_date_begin = "2015-01-10";
$custom_date_end  = "2015-02-10";

然后对于vars和月份组你可以使用像这样的东西

 "SELECT COUNT(DISTINCT email) as counter 
 FROM table 
 WHERE category = 'A' 
 AND date >= '$custom_begin_date' AND date <='$custom_end_date'
 group by MONTH (date);"

答案 1 :(得分:0)

提供的信息不足以编写足够的查询。所以我会尝试猜测细节。

让我们假设我们需要计算每个月和类别的唯一电子邮件数量。

查询可能如下所示:

SELECT dt, category, COUNT(*) AS cnt 
FROM (
    SELECT LEFT(`date`,7) AS dt, category, email
    FROM table 
    GROUP BY LEFT(`date`,7), category, email
) x
GROUP BY dt, category

如果您有可变的日期范围,那么您最好每天进行分组,然后通过脚本为每个日期范围计算电子邮件。