zoukankan      html  css  js  c++  java
  • 每个分类取最新的几条的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
  • 相关阅读:
    058_从键盘读取一个论坛积分,判断论坛用户等级
    057_统计 Linux 进程相关数量信息
    bzoj3436
    bzoj1202
    bzoj1044
    bzoj2338
    bzoj1854
    bzoj1856
    830C
    bzoj2132
  • 原文地址:https://www.cnblogs.com/scgw/p/1416405.html
Copyright © 2011-2022 走看看