我有一张表,上面有联系人详细信息"lead",还有一张表,上面有关于发送到lead"mail_log"的邮箱的信息

我想获得所有已收到mail_id=1但未收到mail_id=2的线索.

因此,我需要潜在客户的邮箱地址和最后一封邮件的发送日期(在本例中为mail_id 1)

非常感谢.

CREATE TABLE `lead` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `data_id` INT(11) NULL DEFAULT NULL,
    `email` VARCHAR(200) NULL DEFAULT NULL COLLATE 'latin1_german2_ci',
    `deleted` TINYINT(1) NULL DEFAULT NULL,
    PRIMARY KEY (`id`) USING BTREE
)COLLATE='latin1_german2_ci' ENGINE=MyISAM AUTO_INCREMENT=4 ;

INSERT INTO `lead` (`id`, `data_id`, `email`, `deleted`) VALUES (1, 217, 'lead217@example.com', NULL);
INSERT INTO `lead` (`id`, `data_id`, `email`, `deleted`) VALUES (2, 578, 'lead578@example.com', NULL);
INSERT INTO `lead` (`id`, `data_id`, `email`, `deleted`) VALUES (3, 124, 'lead124@example.com', NULL);



CREATE TABLE `mail_log` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `lead_id` INT(11) NULL DEFAULT NULL,
    `mail_id` INT(11) NULL DEFAULT NULL,
    `timestamp` DATETIME NULL DEFAULT NULL,
    PRIMARY KEY (`id`) USING BTREE
)COLLATE='latin1_german2_ci' ENGINE=MyISAM ROW_FORMAT=FIXED AUTO_INCREMENT=4 ;

INSERT INTO `mail_log` (`id`, `lead_id`, `mail_id`, `timestamp`) VALUES (1, 217, 1, '2022-03-03 00:00:00');
INSERT INTO `mail_log` (`id`, `lead_id`, `mail_id`, `timestamp`) VALUES (2, 578, 1, '2022-03-03 00:00:00');
INSERT INTO `mail_log` (`id`, `lead_id`, `mail_id`, `timestamp`) VALUES (3, 217, 2, '2022-03-14 00:00:00');

推荐答案

由于您只需要Lead的数据,因此可以在此处使用exists:

select * 
from `lead` l
where deleted is null
  and exists (
    select * from mail_log ml 
    where ml.lead_id = l.data_id and ml.mail_id = 1 and ml.timestamp < date_add(curdate(), interval -1 week) 
  )
  and not exists (
    select * from mail_log ml 
    where ml.lead_id = l.data_id and mail_id = 2
  );

DB<>Fiddle

Mysql相关问答推荐

括号在SQL查询中的作用?

如何计算超过特定数字的所有不同ID组,然后返回这些ID?

使用MySQL工作台导出具有数据的数据库表并导入到其字段具有不同数据类型的同一表中

默认情况下,MariaDB是否限制为本地主机?

为什么我的带有索引字段和非索引字段的 Select 有时需要很长时间

使用Check查看过go 两个月是否完成了IRM Meetup

DJANGO 使用原始 MYSQL 查询计算记录数并在 html 模板中使用结果

MYSQL 8.0 - 从 INFORMATION_SCHEMA.COLUMNS 获取表列重新调整其他不相关的列

java.lang.NullPointerException:无法调用com.proj.my.repository.OrderRepository.save(Object),因为this.orderRepository为空

如何根据 R 中的价格范围将数据从一列复制到新列?

为什么 MySQL 不使用索引进行简单的SELECT * FROM Table WHERE field='value'查询?

如何查询由另一个查询创建的表?

过滤查询结果

Mysql 相等性反对 false 或 true

为什么从我的 SQL 查询中删除 BINARY 函数调用会如此显着地改变查询计划?

主键应该始终是无符号的?

在 MySQL 中,我应该 Select 哪种排序规则?

WHERE 子句中的条件顺序会影响 MySQL 性能吗?

PHP mySQL - 将新记录插入表中,主键自动递增

如何通过一个语句描述数据库中的所有表?