排除在一系列日期列中具有 3 个或更多日期的记录
使用 MySQL 版本 5.7 的 phpMyAdmin。
一个名为 Named 的数据库表,其中包含数百万封具有多个“发送日期”的唯一电子邮件,以及其他列。某些电子邮件的发送日期为 NULL。condensed
只关注这里的 和 列。emailsend_date
以下是该表的示例:
| email | a_last_sent | b_last_sent | c_last_sent | d_last_sent | ..up to 14 dates
----------------------------------------------------------------------------------
| email1 | 2024-06-12 | 2024-05-25 | NULL | 2024-06-06 |
----------------------------------------------------------------------------------
| email2 | 2024-06-01 | 2024-06-16 | 2024-06-05 | 2024-06-19 |
----------------------------------------------------------------------------------
| email3 | NULL | NULL | 2024-05-12 | 2024-06-10 |
----------------------------------------------------------------------------------
| email4 | NULL | 2024-06-13 | NULL | 2024-05-11 |
----------------------------------------------------------------------------------
| email5 | 2024-06-09 | 2024-05-01 | NULL | NULL |
----------------------------------------------------------------------------------
需要排除在 6 月份内发送日期超过 3 个的任何内容。
因此,如果电子邮件的发送日期为 3 或列在 6 月份内,请不要返回这些记录。
使用上面的示例,结果应如下所示:
| email | a_last_sent | b_last_sent | c_last_sent | d_last_sent | ..up to 14 dates
----------------------------------------------------------------------------------
| email1 | 2024-06-12 | 2024-05-25 | NULL | 2024-06-06 |
----------------------------------------------------------------------------------
| email3 | NULL | NULL | 2024-05-12 | 2024-06-10 |
----------------------------------------------------------------------------------
| email4 | NULL | 2024-06-13 | NULL | 2024-05-11 |
----------------------------------------------------------------------------------
| email5 | 2024-06-09 | 2024-05-01 | NULL | NULL |
----------------------------------------------------------------------------------
上述结果不包括,因为它在 6 月份内有 4 个日期。email2
email1符合条件,因为它在 6 月份只有 2 个日期,在 5 月份只有 1 个日期。
email3、 和 满足条件,因为它们在 6 月内只有 1 个日期,在 5 月只有 1 个日期。email4email5
编写以下查询:
SELECT
* FROM
`condensed`
WHERE
(
`a_last_sent` NOT BETWEEN '2024-06-01' AND '2024-06-30'
OR
`b_last_sent` NOT BETWEEN '2024-06-01' AND '2024-06-30'
OR
`c_last_sent` NOT BETWEEN '2024-06-01' AND '2024-06-30'
// remaining date columns
)
上面的查询排除了日期范围内的任何内容。
不确定如何合并计数以排除在指定日期范围(在本例中为 6 月)内超过 3 个日期的任何内容。