这是我的表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则一切正常,哪位高手能够解释~~

解决方案 »

  1.   


    一般rownum都不作为条件使用,你可以这样:   select *
        ( 
        select test.*,rownum rn from test order by pubdate  desc
        ) row_ 
        where rn<=?
      

  2.   

    如果这样写的话,其实还是存在我上面的问题的,当rn>2的时候,无论怎么查询,3641的那条记录都位于最后一行 ,我只是不明白,为什么指定rownum后,它的顺序没有按照里面的那条语句来确定下来,真是奇怪呀 ?
      

  3.   

    我试着将每一列都加上了日期,然后每一条记录都会根据最内层的查询结果按顺序显示,只是在日期为null时,这个就不是按照原先想象的顺序排列了 
      

  4.   

    你试着用nvl吧日期设一个最靠后的日期,如1900年xx
      

  5.   

    日期为NULL时,相当于字段值一致,按日期字段排序,数据库默认随机。