mysql 分组查询最近时间的数据

工作需求:查询每个手机号的最近时间的信息记录,数据库mysql

抽象一下就是按某字段分组,每组倒序或正序,只取一条记录

表结构大致如下

表名:Mob

id(自增) mobile createtime
1 123 2018-10-25 13:13:25
2 123 2018-10-23 00:00:00
3 223 2019-01-01 23:59:59

最开始的思路就是先对表中的数据进行一次按时间排序,接着再对手机号进行group by,会默认取第一行,这不就是最近时间的数据了吗?

然后就开始愉快的写

SELECT * FROM (SELECT * FROM Mob ORDER BY createtime DESC) t GROUP BY mobile ORDER BY createtime DESC

结果无效。。。问题就出在,别人的mysql的group by都很聪明的取第一条,我的mysql 就跟 傻 X一样,我行我素,这个方法对我来讲失败了,可能别人会有效果吧。 不过子查询效率不高,容易形成慢sql,有待商榷

最后用内连接做了出来,主要依靠的还是表中的自增字段:id,真是功臣!

SELECT m1.id, m1.mobile, m1.createtime
FROM Mob m1 LEFT JOIN Mob m2
    ON (m1.mobile = m2.mobile AND m1.id < m2.id)
WHERE m2.id IS NULL
ORDER BY createtime DESC

至此问题解决了,效率也要比子查询快一些

如果大佬有更好的方法,欢迎留言教教我,谢谢!

你可能感兴趣的:(mysql 分组查询最近时间的数据)