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的重复,如下图:如果有更好的方法,欢迎提出指导。
相关文章推荐
- mysql5.7分组查询group by,分组查询并且显示每组时间最新的一条记录
- 带条件查询离当前时间最近的一条记录
- db2 数据库查询条件为有时间差的记录
- 条件查询记录五分钟之前的时间
- sql查询数据库时间最新的一条记录
- sqlplus查询数据中的最新一条,表中有记录时间的字段
- [MySQL]学习笔记- 用户行为表中,查询每个人的一条最新行为(分组 排序 取时间最大的一条记录)
- group by 分组之后,取组内时间最新的记录
- group by配合max提取时间最新的一条记录
- 数据库->SQL Server2005->随机遇到问题->查询name重复,id不重复,时间最新的记录
- mysql GROUP BY 与 ORDER BY 查询不是最新记录
- MySQL——关于MySQL分组查询group by和order by获取最新时间内容的方法
- linq 分组 ,每组取时间最新的记录
- Hibernate的条件查询的几种方式+查询所有的记录
- SQL筛选出同一学科的时间最新的记录
- sql根据时间查询记录
- PHP查询数据库中满足条件的记录条数(两种实现方法)
- 钟表维修管理系统技术解析(七) 保修记录、条件分页查询
- Mysql(三)-数据导入,导出、管理表记录、条件匹配、表查询方式
- PLSQL带中文条件查询无法读出记录