MySQL选择范围内的值,该值不在另一个范围内

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL选择范围内的值,该值不在另一个范围内相关的知识,希望对你有一定的参考价值。

我们有一个表格,我们记录每个客户的请求,每个请求得到一个created_atcustomer_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     |
+---------------------+-----------------------+

我想在08/2018获得customer emailcreated_at记录,但在此之前没有提出请求。换句话说,找出在08/2018创建请求的客户是新客户。 这是我正在尝试的查询,它返回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')

任何帮助将非常感激!

答案

尝试GROUP BYHAVING条款。

使用MIN函数,我们可以找到first_created_atcustomer_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选择范围内的值,该值不在另一个范围内的主要内容,如果未能解决你的问题,请参考以下文章

将一个范围内的值转换为另一个范围内的值

将一个范围内的数字转换为另一个范围内的数字[重复]

当参考范围内的值发生变化时,VBA 更新公式

AutoCAD框选不在可见范围内的对象

通过从另一个表中查找某个范围内的值来游标并更新数据库记录

遍历所有工作表并查找范围内的值。如果找到然后执行一些操作并转到