【发布时间】:2018-02-07 04:34:03
【问题描述】:
我正在处理个人收件箱。这是我的收件箱表:
收件箱
email -- createdDate -- message
mail1@test.com -- 12/02/2017 -- message1
mail1@test.com -- 13/02/2017 -- message2
mail3@test.com -- 14/02/2017 -- message3
mail2@test.com -- 10/02/2017 -- message4
mail2@test.com -- 05/02/2017 -- message5
mail3@test.com -- 11/02/2017 -- message6
mail3@test.com -- 16/02/2017 -- message7
查询后我想要什么:
email -- createdDate -- message
mail3@test.com -- 16/02/2017 -- message7
mail1@test.com -- 13/02/2017 -- message2
mail2@test.com -- 10/02/2017 -- message4
我已经尝试了一些使用 group by 和 order by 以及 left join 的方法,但是执行起来需要很多时间。
我目前的查询是:
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 查询得到这个结果吗? 非常感谢..
【问题讨论】:
-
关于性能的问题应该包括
SHOW CREATE TABLE [table]和EXPLAIN [query] -
您想要最新的电子邮件信息吗?
-
是每封邮件的最新消息
-
如果您在同一日期有两条来自同一来源的消息会怎样?您需要消息的时间以及获取最新消息的日期。
-
其实不是这里的问题。我的 createdDate 是一个时间戳
标签: mysql