表有几千条数据,按写入表先后顺序自然排列了,现在每次只想取出最后5条记录后再按时间从新到旧排列,顺序是先查去5条记录,在只对着5个记录排序查询出来给DATASET,能实现吗?要是这样牛人说是代价大:select top 5 * from table order by time desc(我估计是先对整个表排序后再取5条数据)

解决方案 »

  1.   

    select top 5 * from table order by time desc把*替换成你要提取的字段
      

  2.   

    select top 5 * from table order by time desc 
      

  3.   

    LS 没懂我意思?
    select top 5 * from table order by time desc 
    这句你认为他先排序再取5条还是先去5条再排序,差别大的了,*只是我说明个问题,实际上我只会写需要的几个字段
      

  4.   


    select * from (select top 5 * from yourtable order by id desc) t order by [time] asc
      

  5.   

    select top 5 * from table order by time desc 
    这样就比较高效了。
      

  6.   

    如果只有这种写法,那么你的数据库设计是很差的order by time desc 一般都有一个主键  int identity primary key
    那么你可以order by pkid desc 这样比order by time desc效率好的多! 
      

  7.   

    select top 5 * from table order by time desc 
    当然是先排序了!
      

  8.   


    如果PK是guid呢?不要想当然好不好
      

  9.   

    先取出5条给DATASET,再排序,效率不成问题的。
      

  10.   

    几千条不算很多,几百万条也可以用order by ** desc来排序
      

  11.   

    就按照5楼说的
    你将表先以id为准降序排列取出前5条记录就是你要的最后插入的5条记录
    再以时间为准将查询出的记录降序排列出来即可
    但5楼也出了写写的失误,他以时间的升序排列了
    应为
    select * from (select top 5 * from table order by id desc) table order by [time] desc
      

  12.   

    time字段有索引的话select top 5 a,b,c from table order by time desc 这个效率会差?
      

  13.   

    所以最右边的条件能过滤最多,这样的sql语句最高效
      

  14.   


    select top 5 * from table order by time desc 
      

  15.   

    select * from (select top 5 * from table order by id desc) table order by [time] desc
    这点数据几乎不用考虑效率问题
      

  16.   

    按时间倒着排个序 然后去前5条select top 5 × from table order by createtime desc
      

  17.   

    select * from 表名 where rownum<=5 order by createtime desc