您好我有一个数据库,其中包含一个包含电子邮件地址的列,第二列包含类别,第三列包含日期。
我想要做的是计算多个日期范围之间“A”类别中唯一电子邮件地址的数量。所以我有这个:
SELECT COUNT(DISTINCT email) as counter
FROM table
WHERE category = "A" AND date < "2015-12" AND date > "2015-11";
然后我将对第二个日期范围单独进行查询。
现在这是我的问题:
如果电子邮件地址在第一个月和第二个月出现,它将继续计算这两个月,因为它在我查询的范围内是唯一的。
如何创建一个查询,计算一年的唯一电子邮件地址,然后计算一个月内的不同条目,而不包括重复项?
谢谢!
答案 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
如果您有可变的日期范围,那么您最好每天进行分组,然后通过脚本为每个日期范围计算电子邮件。