在 MySQL 5.7 中,我有一个如下所示的表:
| email | a_last_sent | a_last_open | b_last_sent | b_last_open | ...more columns
----------------------------------------------------------------------------------
| email1 | 2024-06-12 | 2024-06-25 | 2024-03-06 | 2024-06-06 |
----------------------------------------------------------------------------------
| email2 | 2024-06-01 | 2024-06-16 | 2024-06-05 | NULL |
----------------------------------------------------------------------------------
| email3 | 2024-06-01 | NULL | 2024-05-12 | 2024-06-10 |
----------------------------------------------------------------------------------
| email4 | NULL | NULL | 2024-04-02 | 2024-05-11 |
----------------------------------------------------------------------------------
| email5 | 2024-06-09 | 2024-05-01 | NULL | NULL |
----------------------------------------------------------------------------------
我正在尝试返回 180 天(从 6 月开始)last_sent 的 NULL 的 last_open 行。
因此结果需要有一个可追溯到 180 天的last_sent 日期和一个NULL的last_open 日期。
在上面的示例中,有些记录的 last_sent 日期为 NULL,last_open 日期为 NULL - 我不需要返回这些记录。
仅是 180 天前(从 6 月开始)的 last_sent,并且 Last_open 为 NULL。
这是我尝试过的:
SELECT * FROM `table` WHERE
(`a_last_sent` BETWEEN '2024-01-02' AND '2024-06-30' AND `a_last_open` IS NULL)
+ (`b_last_sent` BETWEEN '2024-01-02' AND '2024-06-30') AND (`b_last_open` IS NULL)
+ (`c_last_sent` BETWEEN '2024-01-02' AND '2024-06-30') AND (`c_last_open` IS NULL)
...more columns
使用上表示例,我希望得到这样的结果:
| email | a_last_sent | a_last_open | b_last_sent | b_last_open | ...more columns
----------------------------------------------------------------------------------
| email2 | 2024-06-01 | 2024-06-16 | 2024-06-05 | NULL |
----------------------------------------------------------------------------------
| email3 | 2024-06-01 | NULL | 2024-05-12 | 2024-06-10 |
----------------------------------------------------------------------------------
由于
email2
和 email3
的 last_sent 日期在 6 月起的 180 天内,且 last_open 日期为 NULL,这些结果就是我正在寻找的结果。
但是使用上面的查询,我得到的结果为零。
请帮我解决这个问题,或者让我知道这是否可以做到。
谢谢你。
样本数据:
电子邮件 | a_last_sent | a_last_open | b_最后发送 | b_last_open |
---|---|---|---|---|
电子邮件1 | 2024-06-12 | 2024-06-25 | 2024-03-06 | 2024-06-06 |
电子邮件2 | 2024-06-01 | 2024-06-16 | 2024-06-05 | 空 |
电子邮件3 | 2024-06-01 | 空 | 2024-05-12 | 2024-06-10 |
电子邮件4 | 空 | 空 | 2024-04-02 | 2024-05-11 |
电子邮件5 | 2024-06-09 | 2024-05-01 | 空 | 空 |
像这里一样尝试:
Select tbl.*
From tbl
Where ( a_last_open Is Null And DATE_ADD(a_last_sent, INTERVAL 180 DAY ) >= CURRENT_DATE )
OR
( b_last_open Is Null And DATE_ADD(b_last_sent, INTERVAL 180 DAY ) >= CURRENT_DATE )
结果:
电子邮件 | a_last_sent | a_last_open | b_最后发送 | b_last_open |
---|---|---|---|---|
电子邮件2 | 2024-06-01 | 2024-06-16 | 2024-06-05 | 空 |
电子邮件3 | 2024-06-01 | 空 | 2024-05-12 | 2024-06-10 |