首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在MySQL中获取不同的数据

在MySQL中获取不同的数据
EN

Stack Overflow用户
提问于 2013-05-07 13:20:52
回答 2查看 87关注 0票数 0

目前,我正在获取数据库中唯一电子邮件地址的计数。

代码语言:javascript
运行
复制
Table1
---------------------------------------------
 id    email          name      date_applied
---------------------------------------------
 1    abc@mail.com   ABC       2013-04-17
 2    bcd@mail.com   BCD       2013-04-18
 3    xyz@mail.com   XYZ       2013-04-20
 4    tre@mail.com   TRE       2013-04-28
 5    esf@mail.com   ESF       2013-04-29
 6    bcd@mail.com   BCD       2013-04-29
 7    abc@mail.com   ABC       2013-04-30
---------------------------------------------

以下是关于我如何获得本周的独特电子邮件的查询:

代码语言:javascript
运行
复制
select count(distinct(`A`.`email`)) as total 
from Table1 as A 
where A.date_applied BETWEEN `2013-04-29` and `2013-05-05`

Current Week: 2013-04-29 => 2013-05-05

我想要实现的是在不忽略前几周的电子邮件的情况下,获得本周的新电子邮件的数量。

我非常需要你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-07 13:44:40

你会想要聚合。要获取添加不同电子邮件的日期,请执行以下操作:

代码语言:javascript
运行
复制
SELECT email, MIN(date_applied) as first
FROM Table1
GROUP BY email
HAVING first BETWEEN 2013-04-29 AND 2013-05-05

结果中的行数就是您的答案。

或者使用子查询。我仍然需要习惯MySQL对它们的支持。:)

不过,您应该考虑一下您的模式设计。我知道这可能是一个最小的例子,但date_applied并不是你思维导图中的应用日期。在您的心目中,email是这个表中的关键,而不是Id。为什么不让dbschema与您的想法一致呢?那么您的查询将会更简单,性能更高。

票数 0
EN

Stack Overflow用户

发布于 2013-05-07 13:35:37

您可以通过使用子查询来实现这一点,如下所示:

代码语言:javascript
运行
复制
SELECT COUNT(DISTINCT `email`) AS Total FROM Table1 AS A 
  WHERE A.date_applied 
BETWEEN '2013-04-29' AND '2013-05-05'
    AND A.email NOT IN (SELECT email FROM Table1
                         WHERE date_applied < '2013-04-29');

结果:

代码语言:javascript
运行
复制
| TOTAL |
---------
|     1 |

请参阅this SQLFiddle

以下是查询的描述:

首先,你需要在两个日期(即一周)之间收到邮件,如下所示:

代码语言:javascript
运行
复制
SELECT DISTINCT email FROM Table1
 WHERE date_applied BETWEEN '2013-04-29' AND '2013-05-05'

然后搜索不唯一的电子邮件(即在之前的日期已经存在):

代码语言:javascript
运行
复制
SELECT email 
  FROM Table1
 WHERE date_applied < '2013-04-29'

现在使用NOT IN从当前查询中排除这些电子邮件

代码语言:javascript
运行
复制
SELECT DISTINCT `email` FROM Table1 AS A 
  WHERE A.date_applied 
BETWEEN '2013-04-29' AND '2013-05-05'
    AND A.email NOT IN (SELECT email FROM Table1
                         WHERE date_applied < '2013-04-29');

现在使用COUNT()函数来获取电子邮件的数量。

请参阅this SQLFiddle

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16411729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档