Oracle数据库。。表结构如下:
id                创建日期             修改日期            是否置顶
news_id           cre_date             upd_date             is_top
1          2011-03-18 08:14:02    2011-03-18 08:14:02          0
2          2011-03-18 08:15:42    2011-03-18 08:15:42          0
3          2011-03-18 08:22:18    2011-03-18 08:22:18          1
4          2011-03-18 08:44:30    2011-03-18 08:44:30          1要求:
is_top按照时间倒序显示在最前面,
upd_date按时间倒序显示在is_top的下面。显示格式如下:
id                创建日期             修改日期            是否置顶
news_id           cre_date             upd_date             is_top
4          2011-03-18 08:44:30    2011-03-18 08:44:30          1
3          2011-03-18 08:22:18    2011-03-18 08:22:18          1
2          2011-03-18 08:15:42    2011-03-18 08:15:42          0
1          2011-03-18 08:14:02    2011-03-18 08:14:02          0

解决方案 »

  1.   


    select * 
    from tb
    order by is_top desc,upd_date desc
      

  2.   

    问题解决了:select * from
    (select * from vw_news where cate_id=1 order by is_top desc,upd_date desc)
    where rownum <= 10;原因:
    要注意的是:在使用ROWNUM 时,只有当Order By 的字段是主键时,查询结果才会先
    排序再计算ROWNUM,下面OBJECT_ID 是表T_TEST1 的主键字段:
    但是,对非主键字段OBJECT_NAME 进行排序时,结果就混乱了:
    出现这种混乱的原因是:Oracle 先按物理存储位置(rowid)顺序取出满足rownum 条
    件的记录,即物理位置上的前5 条数据,然后在对这些数据按照Order By 的字段进行排
    序,而不是我们所期望的先排序、再取特定记录数。
    如果需要对非主键字段排序再去前n 条数据,我们可以以以下方式实现:
    SQL> select object_id,object_name
    2 from (select object_id,object_name from t_test1
    3 order by object_name)
    4 where rownum <= 5;
    OBJECT_ID OBJECT_NAME
    ---------- ------------------------------
    35489 /1000e8d1_LinkedHashMapValueIt
    35490 /1000e8d1_LinkedHashMapValueIt
    21801 /1005bd30_LnkdConstant
    21802 /1005bd30_LnkdConstant
    17205 /10076b23_OraCustomDatumClosur在网上找的一个关于Oracle中rownum的用户的文档。