rownum到底在什么时候确定的?

guan_tu 2014-05-28 05:00:07
这是我的表

create table test
(
id number primary key,
title nvarchar2(50),
pubdate timestamp
);
insert into TEST (ID, TITLE, PUBDATE)
values (3640, 'fsdf', null);
insert into TEST (ID, TITLE, PUBDATE)
values (3641, 'fsdf', to_timestamp('06-09-1999 00:00:00.000000', 'dd-mm-yyyy hh24:mi:ss.ff'));
insert into TEST (ID, TITLE, PUBDATE)
values (3668, 'fsf', null);
insert into TEST (ID, TITLE, PUBDATE)
values (3660, 'fsf', null);
insert into TEST (ID, TITLE, PUBDATE)
values (3661, 'fsf', null);
insert into TEST (ID, TITLE, PUBDATE)
values (3662, 'fsf', null);
insert into TEST (ID, TITLE, PUBDATE)
values (3663, 'fsf', null);
insert into TEST (ID, TITLE, PUBDATE)
values (3665, 'fsf', null);
insert into TEST (ID, TITLE, PUBDATE)
values (3667, 'fsf', null);
insert into TEST (ID, TITLE, PUBDATE)
values (3669, 'fsf', null);
insert into TEST (ID, TITLE, PUBDATE)
values (3671, 'fsf', null);
commit;
分页语句为
select * from test order by pubdate desc
此时id =3661的记录位于第五条
但是加上rownum后,语句如下
select row_.*, rownum rownum_ from
(
select * from test order by pubdate desc
) row_
where rownum <=?
当问号的值 为 4-10 时,3661都显示在最后一行,根据上面的语句判断,这条记录应该显示在第五行的呀?
注意我的日期列为null,如果不为null则一切正常,哪位高手能够解释~~







...全文
235 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
以学习为目的 2014-05-29
  • 打赏
  • 举报
回复
日期为NULL时,相当于字段值一致,按日期字段排序,数据库默认随机。
guan_tu 2014-05-28
  • 打赏
  • 举报
回复
引用 4 楼 lamb218 的回复:
你试着用nvl吧日期设一个最靠后的日期,如1900年xx
只要日期列的数值相等都没有用
lamb218 2014-05-28
  • 打赏
  • 举报
回复
你试着用nvl吧日期设一个最靠后的日期,如1900年xx
guan_tu 2014-05-28
  • 打赏
  • 举报
回复
我试着将每一列都加上了日期,然后每一条记录都会根据最内层的查询结果按顺序显示,只是在日期为null时,这个就不是按照原先想象的顺序排列了
guan_tu 2014-05-28
  • 打赏
  • 举报
回复
引用 1 楼 zlloct 的回复:
一般rownum都不作为条件使用,你可以这样: select * ( select test.*,rownum rn from test order by pubdate desc ) row_ where rn<=?
如果这样写的话,其实还是存在我上面的问题的,当rn>2的时候,无论怎么查询,3641的那条记录都位于最后一行 ,我只是不明白,为什么指定rownum后,它的顺序没有按照里面的那条语句来确定下来,真是奇怪呀 ?
CT_LXL 2014-05-28
  • 打赏
  • 举报
回复
引用 楼主 nd707355117 的回复:
这是我的表 分页语句为 select * from test order by pubdate desc 此时id =3661的记录位于第五条 但是加上rownum后,语句如下 select row_.*, rownum rownum_ from ( select * from test order by pubdate desc ) row_ where rownum <=? 当问号的值 为 4-10 时,3661都显示在最后一行,根据上面的语句判断,这条记录应该显示在第五行的呀? 注意我的日期列为null,如果不为null则一切正常,哪位高手能够解释~~ [/code]
一般rownum都不作为条件使用,你可以这样: select * ( select test.*,rownum rn from test order by pubdate desc ) row_ where rn<=?

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧