MySQL选择范围内的值,该值不在另一个范围内
Posted
技术标签:
【中文标题】MySQL选择范围内的值,该值不在另一个范围内【英文标题】:MySQL select value in range where that value not in another range 【发布时间】:2018-08-30 14:21:10 【问题描述】:我们有一个表格,我们在其中记录每个客户请求,每个请求都有一个 created_at
和 customer_email
列。
mysql> select * from requests;
+---------------------+-----------------------+
| created_at | customer_email |
+---------------------+-----------------------+
| 2016-08-08 14:05:50 | user1@example.com |
| 2016-08-08 14:05:51 | user2@example.com |
| 2017-08-15 14:41:40 | user3@example.com |
| 2017-08-15 15:17:25 | user2@example.com |
| 2018-08-15 15:30:41 | user1@example.com |
+---------------------+-----------------------+
我正在尝试获取 customer email
的记录,即 08/2018 中的 created_at
,但在此之前没有创建请求。换句话说,找出在 2018 年 8 月创建请求的哪些客户是新客户。
这是我正在尝试的查询,它返回 0
SELECT DISTINCT
customer_email
FROM
requests
WHERE
created_at > '2018-08-01'
AND customer_email NOT IN (SELECT DISTINCT
customer_email
FROM
requests
WHERE
created_at < '2018-08-01')
任何帮助将不胜感激!
【问题讨论】:
查询看起来不错。您是否手动找到了新创建的电子邮件? 即使我知道我有一些新结果,它也不返回任何结果 【参考方案1】:尝试GROUP BY
和HAVING
子句。
使用MIN 函数,我们可以找出first_created_at
对应的customer_email
,然后利用HAVING 子句,我们将结果集限制为在08/18 之后具有first_created_at
的结果集。
SELECT customer_email, DATE(MIN(created_at)) AS first_created_at
FROM requests
GROUP BY customer_email
HAVING first_created_at >= DATE('2018-08-01')
【讨论】:
以上是关于MySQL选择范围内的值,该值不在另一个范围内的主要内容,如果未能解决你的问题,请参考以下文章