mysqlgroupby之后取每个分组最新的⼀条(或者按照⾃定义的
规则排序)
那么⾔归正传,相信看到我这篇⽂章的朋友⼀定是遇到了在分组查询之后 需要的是分组的某⾏数据,例如根据价格⾼低,时间先后等等规则排序只取前⼀条或者若⼲条。但是会发现往往gooup by order by 之后,结果往往不是按照我们设想的那样,所以为了解决这个问题请往下看
这⾥我以更新时间为例,获取最新的⼀条数据,详见下表:
然后根据goods_id进⾏分组查询 取分组后最新的⼀条数据 我们需要的结果是id为3和id为2的这2条数据 但是执⾏后查询的结果是:
可以看出来 得到的结果是3和1,这显然不是我们需要的结果,因为在分组之前数据库就默认得到了结果,然后我们在去order by就得到不想要的数据,所以我们要做的就是,第1步:使⽤GROUP_CONCAT函数 他可以设置分组的条件 在这⾥我们需要的条件就是时间最新的⼀条,语法如下:
⾥⾯的id是我只查询id,然后条件就是时间倒叙,得到的结果就是把分组后的id都查询出来,但是我们只需要第⼀条,所以我们需要⽤到另外⼀个函数,没错!第2步:就是SUBSTRING_INDEX截取函数 具体语法如下:
这样 我们就得到了根据时间倒叙,分组后最新的数据了,但是只有id显然不是我们想要的,所以,最后⼀步就是经常⽤的in查询 把数据全部查询出来 如下图:
这样 我们就把想要的结果查询出来了 可以使⽤很多其他的⽅式来实现,这⾥我只分享了⾃⼰的这种做法。
如果感觉以上单表的情况⽆法满⾜各位的需求,请参考下我之前发布的⼀篇论坛的问题 多表关联的情况,链接如下:
看了这篇⽂章还是没有解决问题的话,可以私信我 欢迎打扰!
--------------------------最近更新 2020 08-07-----------------------------------------------------------------------------------------------
其实还有更简洁的⽅式,⾸先我们要明⽩执⾏的顺序
1.from
2.where
4.聚合函数(max,min, count,sum)
5.select
因为先group by后order by的 所以我们只要保证先执⾏orderby 再执⾏group by 就⾏了  那么思路有了 咋做呢?
⾮常简单 把order by 的结果集提升到from这个第⼀的级别就⾏了 然后再去groupby这个orderby的结果集就⾏了啦!
当然 你还可以再外⾯的groupby后⾯再继续orderby 这样就是groupby之后的结果再次排序    表数据
查询的结构内容:
这样就是先执⾏的from⾥⾯的结果集 后执⾏的外⾯的group by 是不是⾮常的简单?
>groupby分组

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。