每个分类取最新的几条的SQL实现(转载记录)

假设我们有下面这样结构的一张表,这张表的数据量非常巨大。
CREATE TABLE table1
(   
    [ID]   [bigint] IDENTITY(1,1) NOT NULL,   
    [Name] [nvarchar](128) NOT NULL,   
    [class] int not null,   
    [date]  datetime not null
)
class 表示分类编号。 分类数不固定, 至少有上千种分类 
date 表示该条记录被更新的时间 
我们现在想获得每个分类最新被更新的5条记录。 
解决方案
select id,name,class,date
from(select id,name,class,date ,row_number() over(partition by class order by date desc)
     as rowindex
     from table1) a
where rowindex <= 5
解决方案简单说明:
这个解决方案的关键就是使用了SQL 2005 的 ROW_NUMBER 这个全新的函数。
ROW_NUMBER ( ) 函数的语法如下: 
ROW_NUMBER ( )     OVER ( [ <partition_by_clause> ] <order_by_clause> ) 
OVER 子句中的 PARTITION BY 将结果集分为多个分区。 
OVER 子句中的 ORDER BY 将对 ROW_NUMBER 进行排序。 
本文转摘自『蓝派网』http://www.lan27.com/Article/200805/7338.htm
posted @ 2009-03-19 11:07  scgw  阅读(316)  评论(0编辑  收藏  举报