在实际用途中,常常会要求取最近的几条纪录,这就需要先对纪录进行排序后再取rownum <=

一般常见的

SELECT *

FROM (SELECT a.*

FROM torderdetail a

ORDER BY order_date DESC)

WHERE ROWNUM <= 10

而在CSDN曾经发生过讨论,关于取近的10条纪录,有人给出这样的语句

SELECT a.*

FROM torderdetail a

WHERE ROWNUM <= 10

ORDER BY order_date DESC

之所以会出现这样的语句,主要是从效率上的考虑,前面条语句,是要进行全表扫描后再排序,然后再取10条纪录,后一条语句则不会全表扫描,只会取出10条纪录,很明显后条语句的效率会高许多。

那为什么会有争议呢,那就在于在执行顺序上争议,是先执行排序取10条纪录,还是取10条纪录,再排序呢?两种顺序取出来的结果是截然相反 的,Oracle查询前10条记录时先排序再取10条,就是取最近的10条,而先取10条,再排序,则取出的最早的10条纪录。对于此语句,普遍的认为执 行顺序是先取10条纪录再排序的。

所以此语句应该是错误。但实际上并非如此,此语句的执行顺序和order by的字段有关系,如果你order by 的字段是pk,则是先排序,再取10条(速度比第一种语句快),而排序字段不是PK 时,是先取10条再排序,此时结果就与要求不一样了,所以第二种写法一定要在排序字段是主键的情况下才能保证结果正确。

Row_number() over()这个分析函数是从9I开始提供的,一般的用途和rownum差不多。

一般写法row_number() over( order by order_date desc) 生成的顺序和rownum的语句一样,效率也一样(对于同样有order by 的rownum语句来说),所以在这种情况下两种用法是一样的。

而对于分组后取最近的10条纪录,则是rownum无法实现的,这时只有row_number可以实现,row_number() over(partition by 分组字段 order by 排序字段)就能实现分组后编号,比如说要取近一个月的每天最后10个订单纪录

SELECT *

FROM (SELECT a.*,

ROW_NUMBER () OVER (PARTITION BY TRUNC (order_date) ORDER BY order_date DESC)

rn

FROM torderdetail a)

WHERE rn <= 10

Rownum的另类用法,有时候我们会遇到这种需求,要求输出当月的所有天数,许多人会烦恼,数据库里又没有这样的表,怎么输出一个月的所有天数呢?用rownum就能解决:

SELECT TRUNC (SYSDATE, 'MM') + ROWNUM - 1

FROM DUAL

CONNECT BY ROWNUM <= TO_NUMBER

(TO_CHAR (LAST_DAY (SYSDATE), 'dd'))

oracle查询最近十条数据_Oracle-查询最近更新的前10条数据相关推荐

  1. mysql查询每个id的前10条数据_解决 MySQL 比如我要拉取一个消息表中用户id为1的前10条最新数据...

    我们都知道,各种主流的社交应用或者阅读应用,基本都有列表类视图,并且都有滑到底部加载更多这一功能, 对应后端就是分页拉取数据. 好处不言而喻,一般来说,这些数据项都是按时间倒序排列的,用户只关心最新的 ...

  2. 只导表前10条数据_【205期】面试官:数据量很大的情况下,对于分页查询你有什么优化方案吗?...

    点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 >>号外:公众号改版后文章顺序不固定,欢迎大家把我们面试题精选这个公众号设置为星标,感谢大家一年的支持! ...

  3. mysql查询数据分组后保留每组前n条数据

    最近做项目遇到一个这样需求的sql语句,根据一系列的条件后,分组查询出来的数据是这样的 可以看到用户id=4 的有三条数据,用户id=1的有两条数据. 我需求是相同的用户id只取最多两条数据,也就如下 ...

  4. oracle和sql server中,取前10条数据语法的区别

    在sql server中,取数据中前10条语句,我们可以用top 10 这样语句,但是oracle就没有这个函数,接下来介绍它们之间的区别 1.sql server 取前10语句和随机10条的语法 - ...

  5. imp 只导表前10条数据_Excel数据规范化10条原则,让你的工作效率快速提升

    Excel不仅仅只是一个数据录入工具,而是非常强大的数据处理工具,而Excel中针对数据处理有一套自己的规则,按照他的规则去做,虽然在录入数据时可能会稍微麻烦点,但却能给我们以后的数据处理提供很大的便 ...

  6. imp 只导表前10条数据_做电商设计,你必须懂的10条数据指标

    数据指标是什么?--是一个切入数据的角度.有了数据指标的存在,才能知道需要采集什么数据.需要持续监测什么数据.用什么角度来和历史表现做对比. 数据指标的类型各种各样,有些指标是被广泛使用的,如 DAU ...

  7. python-列表演练-根据学生id获取学生数据-获取学生数据中得分较高的前N条数据

    目标 一, 写一个方法 get_stu_data_by_id 接收一个参数(学生id) 返回这个学生的全部数据 二,写一个方法 get_best_data_by_id 接收两个参数(学生id,显示数量 ...

  8. mybatis 取查询值_Oracle结合Mybatis实现取表TOP 10条数据

    之前一直使用mysql和informix数据库,查表中前10条数据十分简单: 最原始版本: select top * from student 当然,我们还可以写的复杂一点,比如外加一些查询条件? 比 ...

  9. 各种数据库查询前几条数据的方法

    sql在不同数据库查询前几条数据 关键字: sql 前几条结果  sql在不同数据库查询前几条数据  1. ORACLE    SELECT * FROM TABLE1 WHERE ROWNUM< ...

最新文章

  1. ActionBar右边菜单按钮的添加
  2. IO模式和IO多路复用
  3. 雷军旗下金山云冲刺IPO:3年营收74亿,小米系贡献23%,CEO王育林仅持股2.1%
  4. 什么是脏读,不可重复读,幻读
  5. cnblogs第一篇
  6. Taro+react开发(84):taro路由跳转
  7. (计算机组成原理)第五章中央处理器-第一节:CPU的功能与基本结构(运算器和控制器等寄存器)
  8. 算法高级(26)-在Java8中为什么要使用红黑树来实现的HashMap?
  9. python爬虫-Python爬虫入门这一篇就够了
  10. apache php的权限,Unix上的Apache PHP写权限
  11. 二元函数洛必达求极限_(整理)二元函数极限的求法.
  12. SSO单点登录原理详解(从入门到精通)
  13. 时空图卷积网络:一种用于交通预测的深度学习框架
  14. w10打游戏老是弹出计算机,有效解决win10玩游戏弹出输入法的问题
  15. 大容量sd卡reread之后/dev下概率性出现无设备文件
  16. 如何快速定位BUG?BUG定位技巧及测试人员定位的N板斧
  17. HTTP请求头字段解释
  18. ORACLE给指定用户授权表的部分权限
  19. 2020年7月最新阿里云服务器优惠卷哪里领?
  20. srs流媒体服务器推流的流程

热门文章

  1. 【Spring】Spring 自动注入(autowire)详解
  2. 【Elasticsearch】追踪同步分片副本 in-sync allocation IDs
  3. 【kafka】java使用jmx 监控Kafka
  4. 【kibana】状态异常 Status: Red Status changed from red to yellow - No existing Kibana index found
  5. treeReduce和reduce
  6. Spring : @Component注解
  7. 【SpringBoot】SpringBoot+druid+Myibatis集成
  8. 04-linux下离线安装Rserve
  9. 为什么网上都推荐下载jdk8和jdk11,而没有人推荐最新的15
  10. 【linux系统编程】基础开发工具:vi/vim