select top 8 from tab order by ID desc

解决方案 »

  1.   

    select * from tab where (select count(1) from tab where id=tab.id and cata=tab.cata)<8
      

  2.   

    select * from 表 a where id in (select top 8 ID from 表 where CATA=a.CATA order by ID desc) order by CATA,ID desc
      

  3.   

    Limpire你的不错!用IN会不会影效率?而且如果指定分类的话就会用到两个INselect * from 表 a where id in (select top 8 ID from 表 where CATA=a.CATA order by ID desc) and CATA IN (1,2,3,4) order by CATA,ID desc
      

  4.   

    对于这种“分组提取TOP(N)条记录”的问题,似乎只有这种解决方案,如果效率低,在索引方面想象办法了。如可以对CATA和ID做一个复合聚集索引,CATA正序,ID逆序,查找的时候就可以省略排序:
    select * from 表 a where id in (select top 8 ID from 表 where CATA= a.CATA) and CATA IN (1,2,3,4)但插入或更新数据会慢一些,关键你怎么取这个平衡点了。另:或许有效率更高的方法我不知道,以我的能力,就这样了:)