2015-12-08 40 views
1

嗨我有一个数据库的列包含电子邮件地址和第二列包含类别和第三列包含日期。SELECT DISTINCT在每个月内对条目进行计数。 MYSQL

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

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

然后我会为第二个日期范围做一个单独的查询。

现在,这里是我的问题:

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

如何创建一个查询,将计算不同的电子邮件地址的一年让我们说,再算上不包括重复在一个月期间,不同的项目?

谢谢!

+0

使用'GROUP BY'? –

+0

再次混淆“一年的独特电子邮件地址让我们说” - 一年中不同月份的同一电子邮件计为一次或每个月单独计算一次?如果你想得到正确的结果,你必须解释你需要的非常详细和肯定。这是编程的重要组成部分。 – BI2O2T

回答

0

如果你想自定义日期,您可以将值设置为瓦尔

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

那么对于VAR和月份团的,你可以使用出头等提供的这个

"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);" 
+0

对不起,谢谢@ chris85我更新了答案 – scaisEdge

+0

查询将始终返回空结果,因为没有日期可以满足这个:'date <“2015-01-01”AND date>“2015-12-31”' – BI2O2T

+0

我已经更新了答案... – scaisEdge

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 

如果你有变量的日期范围,那么你最好组每天的基础上,再算上通过脚本通过电子邮件每个日期范围。