您的位置:首页 > 数据库 > MySQL

GROUP BY 条件查询最新时间记录

2017-10-25 12:35 1176 查看

概述:

最近项目一个查询需求是从一个表中同一个IP多条记录的只获取一条IP记录,而这条IP记录要最新的。很明显需求没什么难,分组当然想到的是group by,但是这里是有个时间条件筛选的。虽然网上很多答案,但是我发现实际操作上是没有生效的,不知道是MYSQL版本问题还是答主们只是理论而没有实际尝试过,这里分享一下我的处理方式。

准备:

1、首先看我准备了同一个IP两条数据,时间不一样的。



2、然后我们尝试一下,直接group by 获得的是哪一条数据。



3、从上图可知,分组是实现了,但是并不是自己想要的最新时间的那条记录。到此,如果你尝试从网上搜索具体的解决方法,你会发现大多数答主会告诉你,对group by 的表先进行时间排序作为子查询提供给group by 就能解决。大多数答案如下图。



那么如果我们按照这答案调整SQL再查询一次呢?



到这里就傻眼了吧?说好的能解决问题呢?甚至答主连搜索结果截图都给出来了,可自己为什么就还是没有得到想要的结果呢?我猜可能是版本问题吧。我这里的版本是



4、那么我们分析一下需求和解决方法吧,我们需要的是最新时间,强调的是一个“最”,那么聪明的你想到了什么了没有?对!就是聚合函数max(),我们可以分步来,先查分组每个IP的最新时间再根据最新时间作为条件进行条件搜索就好。

查分组每个IP的最新时间子查询:



然后组合语句:



以上就是我的答案,不过以上答案我是为了方便您们理解只用了一个IP进行查询,那么我们再看看如果这样的方法在多个IP中会不会失效。

表中的数据:



其他答主不生效的方法试一下,以防冤枉别人了:



很遗憾,还是不行!

我的方法:



最终多个IP测试也是成功的。

总结:

网上搜索出来别人的答案,尽管别人截图都有了,但是还是有可能不适合自己的,关键是自己会思考改进。同时,我这方法可能不是最简洁的SQL,我希望我这里能起到一个抛砖引玉的作用,有更好答案的您们,欢迎留言交流!!!

修正:

感谢评论区的网友指出当两个ip时间相同时,会因为查询max_time的子查询查出来的数据重复,从而导致最终查出来的结果也是重复的,针对该问题,目前想到的解决方法是加多一层分组来处理max_time的重复,如下图:



如果有更好的方法,欢迎提出指导。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql 数据 group-by