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

Posted

技术标签:

【中文标题】MySQL选择范围内的值,该值不在另一个范围内【英文标题】:MySQL select value in range where that value not in another range 【发布时间】:2018-08-30 14:21:10 【问题描述】:

我们有一个表格,我们在其中记录每个客户请求,每个请求都有一个 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     |
+---------------------+-----------------------+

我正在尝试获取 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 BYHAVING 子句。

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

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

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

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

无法编辑 Mat DatePicker 范围内的值。角 12

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

MySQL选择范围内的坐标