取回另一组日期之间的NULL日期记录

问题描述 投票:0回答:1

在 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,这些结果就是我正在寻找的结果。

但是使用上面的查询,我得到的结果为零。

请帮我解决这个问题,或者让我知道这是否可以做到。

谢谢你。

sql mysql mysql-5.7
1个回答
0
投票

样本数据:

电子邮件 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

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.