rownum 到底是怎么产生的?

[复制链接]
查看11 | 回复6 | 2014-2-19 11:55:14 | 显示全部楼层 |阅读模式
我的一个查询
select age from t_personwhere rownum=1 order by abs(age-32) desc;

select age from t_personwhere rownum=1 order by abs(age-32) asc;
结果完全一样,而且既不是最大也不是最小
于是我认为rownum 是在order 之间就排好了
可是我在服务器上运行结果就不一样了

唯一的不同就是它是9i 我是10g

难道是版本问题?
还是别的什么
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
这个语句才能得到你要的结果
select age from (select age from t_person order by abs(age-32) desc) where rownum=1;
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
如果abs(age-32)有索引,你的sql可能能得到需要的结果
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
谢谢,我搞清楚了,应该是版本问题,9i的order 会改变rownum的值,10g 不会
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
原帖由 lkiop1234 于 2009-9-15 00:26 发表
谢谢,我搞清楚了,应该是版本问题,9i的order 会改变rownum的值,10g 不会

That doesn't sound right. Create a small test case in 9i and 10g and post it here.
Yong Huang
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
原帖由 lkiop1234 于 2009-9-15 14:26 发表
谢谢,我搞清楚了,应该是版本问题,9i的order 会改变rownum的值,10g 不会

你的测试是有问题的。比如你在9i下的时候,第一条数据刚才是abs(age-32)最大的那一条呢?
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
晕 没9i的库 明天去公司测试下贴上了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行