日期:2014-05-18  浏览次数:20585 次

求一SQL语句,一句话写完
查询表中不同目录分类(字段假设为cata)的最新8条记录,按降序排列,结果为:

ID CATA ...
=============
9 Toy
8 Toy
7 PC
6 PC
...

------解决方案--------------------
select * from tab where (select count(1) from tab where id=tab.id and cata=tab.cata)<8
------解决方案--------------------
对于这种“分组提取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)

但插入或更新数据会慢一些,关键你怎么取这个平衡点了。

另:或许有效率更高的方法我不知道,以我的能力,就这样了:)