那么我们需要取得整行的数据该怎么办?
起初搜寻到的资料是这样的:
首先按照 create_time 倒叙排序,然后分组,那么每个分组中排在最上面的记录就是时间最大的记录
但是结果不是这样的,经过搜集资料,得出需要在排序后边加 limit 10000000000
如果不加的话,数据不会先进行排序,通过 explain 查看执行计划,可以看到没有 limit 的时候,少了一个 DERIVED *** 作。
select * from (select row_number() over(partition by id order by create_tiem desc) rn, id, create_time, ... , ... from table )t1 where rn = 1
在这里...代表的是字段名称,将需要的字段名称放在这里,需要哪些放那些。
SELECT t.*FROM (select * from `table` order by `create_time` desc limit 10000000000) t GROUP BY t.id
在这里就是先将数据进行排序然后再分组,然后取出的是最大的一个值,这里有点要注意,limit 10000000000这个根据不同的版本看是否要加这个,5.5之前的不用加,之后的要加,反正加上肯定没有错。
group by后取的一条数据默认是按主键id排序后的第一条
你好,很高兴回答你的问题。假设是要按照表t中的字段a进行分组,取分组中b字段的最大值,那查询sql是下面这样:
select a,max(b) from t group by a。
如果有帮助到你,请点击采纳。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)