我正在处理个人收件箱。这是我的收件箱表:
收件箱
email - createdDate - message
mail1@test.com - 12/02/2017 - message1
mail1@test.com - 2017年2月13日 - message2
mail3@test.com - 2017年2月14日 - message3
mail2@test.com - 2017年2月10日 - message4
mail2@test.com - 05/02/2017 - message5
mail3@test.com - 11/02/2017 - message6
mail3@test.com - 16/02/2017 - message7
查询后我想要的是什么:
电子邮件 - createdDate - 消息
mail3@test.com - 16/02/2017 - message7
mail1@test.com - 2017年2月13日 - message2
mail2@test.com - 2017年2月10日 - message4
我已经尝试了分组依次和左右连接的一些事情,但需要花费很多时间才能完成。
我目前的查询是:
SELECT a.email, a.createdDate, a.message FROM inbox a LEFT JOIN inbox b ON (a.email = b.email AND a.createdDate < b.createdDate)WHERE b.createdDate IS NULL ORDER BY a.createdDate DESC LIMIT 0,20
我也在我的电子邮件和createdDate字段上创建了索引。 能否帮助我通过执行mysql查询得到这个结果? 非常感谢..
答案 0 :(得分:0)
首先对您的子查询进行排序,然后只选择group by
所选列:
select * from (select email, STR_TO_DATE(createdDate, '%d/%m/%Y') as myDate, message from inbox order by myDate desc) as t
group by email
如果同一天可能有多封电子邮件,您的表格中应该有一个id
列(我认为是这样),那么您需要在订单中添加id DESC
: / p>
select * from (select email, STR_TO_DATE(createdDate, '%d/%m/%Y') as myDate, message from inbox order by myDate desc, id desc) as t
group by email