MYSQL:查询单表中不同邮箱最近一次发送状态
1.联系方式表-customer_contact:
| id | |
| 1 | 123456@qq.com |
| 2 | 987643@qq.com |
| 3 | hahaha@qq.com |
2.发送邮件记录表-contact_send_info:
| id | email_id | status | create_time | |
| 1 | 1 | 123456@qq.com | 1 | 2019-10-01 |
| 2 | 2 | 123456@qq.com | 1 | 2019-10-02 |
| 3 | 3 | 123456@qq.com | 2 | 2019-10-03 |
联系方式表还有记录OA账号的字段,记录表也有OA账号发送的状态;为了便于理解,简化了一些。
先说下,我当时出错的问题。
起初,理解group by排序是按照by的条件排序后,取第一条数据。故写出了一下的错误SQL:
select * from customer_contact c left join (
select email,status from contact_send_info order by create_time desc
) temp on c.email = temp.email
后来测试的时候发现查询出来的状态不是最近一次发送状态。
经同事解释,是因为建表用的是innodb引擎,sql语句中没有order by的时候,默认主键id作为排序字段。
按他的说法,那这里select email,status from contact_send_info order by create_time desc的排序没有起作用,当执行括号内的时候,按照create_time降序。再执行括号外的sql时,先前排序后的结果集temp又按照主键ID进行了第二次排序。在进行分组。导致结果不正确!
经过一番分析修改了SQL:
select * from email_send_info e inner join (
select email,MAX(create-time) maxtime from email_send_info group by email
) temp on e.email = temp.email and e.create_time = temp.maxtime
然后关联联系方式表得到每个联系方式的最近一次发送状态。
如果有更方便的写法,希望高手留言告知一下,谢谢了~

浙公网安备 33010602011771号