mysql分组取最新一条
一般思路
group后取max(id),然后select * from table where id in (XX);或者是直接join,取最小id;但是这个有个问题,效率非常低。
SELECT
count( 0 )
FROM
( SELECT * FROM table_name ) m1
LEFT JOIN table_name m2 ON ( m1.business_id = m2.business_id AND m1.id < m2.id )
WHERE
m2.id IS NULL;
更好的解决方法
mysql有默认group的取值,经过验证,默认是按id正序取第一条。但我们需要取最新一条怎么办?嵌套做子查询,先将表倒叙排号,再按mysql group默认取即可;
对于5.7之前得版本:
select * from (
select * from table_name order by create_time desc
) as t
group by t.business_id;
5.7之后需要加入limit,否则不生效:
select * from (
select * from table_name order by create_time desc limit 100000
) as t
group by t.business_id;
经过测试,相同得表(4000条数据),联表的解决方法耗时5-6000ms,以上的解决方法在50ms内;