代码先锋网 代码片段及技术文章聚合

oracle 去重并按时间排序取第一条



select t.*
from (select a.*, row_number() over(partition by 需要分组的字段 order by 更新时间 desc) rw
from 表 a) t
where t.rw = 1



row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)。
与rownum的区别在于:使用rownum进行排序的时候是先对结果集加入伪劣rownum然后再进行排序,而此函数在包含排序从句后是先排序再计算行号码。
row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开始排序)。
rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内)
dense_rank()也是连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的。

oracle 分析函数 row_number(),返回一个整数值(>=1);
版权声明:本文为iteye_14704原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/iteye_14704/article/details/82566488

智能推荐

mysql和oracle分组排序取第一条

MySQL实现分组排序并取组内第一条数据 第一个例子 错误示范: 正确示范: 内部子查询用limit字段,可固定排序 第二个例子 获取分组后,组内排名第一或最后的数据行。 利用子查询,desc 或者asc,然后GROUP BY 某个维度例如userId, 再select,会默认取分组后的排序的第一条数据。 网上都说Mysql5.7,在子查询的ORDER BY子句后面,必须加上LIMIT 10000...

oracle 分析函数over() ——实现分组后取第一条数据

个人认为分析函数与分组函数的不同,是对原来的数据进行分析,却不会修改原数据的结构、条数。 常用的分析函数如下所列: row_number() over(partition by … order by …) rank() over(partition by … order by …) dense_rank() over(partition by...

Oracle取查询结果第一条记录SQL

Oracle取查询结果第一条记录SQL...

oracle分组后取每组第一条数据

为什么会得出跟上面的语句一样的结果呢?这里补充讲解一下rank()/dense_rank() over(partition by e.deptno order by e.sal desc)语法。 over:  在什么条件之上。 partition by e.deptno:  按部门编号划分(分区)。 order by e.sal desc: &nb...

猜你喜欢

ORACLE中的查询结果只取第一条

简单易学的方式: 原有的SQL不需要变化,只需在原来的SQL外加一层查询条件即可: 括号中即为查询所有的SQL 将SQL放入括号中 即可获取到结果集中的第一条...

Oracle 分组后取每组的第一条记录

根据 start_date排序 ROW_NUMBER() OVER(PARTITION BY SITE_NAME ORDER BY START_DATE desc) 是先把START_DATE 列降序,再为降序以后的每条SITE_NAME 条记录返回一个序号。 ...

Oracle分组,取每个分组的第一条数据

最近有个有个业务需求(springboot项目集合mybatis):需要查询分组后,取每组的第一条数据(oracle数据库),可以在业务代码中实现,但是过于繁琐,后来查阅oracle的函数,得出仅仅在sql中即可实现,非常简洁,简化代码,sql如下: over: 在什么条件之上。 partition by deptno: 按部门编号划分(分区)。 order by e.sal desc: 按工资从...

Oracle两表关联,只取B表的第一条记录

前言   A表、B表两表关联,关联出来的结果里B表有不止一条,需求是只要B表结果中的某一条(按某字段排序)。   首先想到了直接写个带排序的子查询去匹配外围的值,从这个结果集中只要第一条,但是经过验证发现,里边的条件是获取不到外层的值的,因此此方案不可行。   发现 row_number() over函数可用,以下是数据环境及结果。 实例   需求是只要每个...