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

     create table #temp

    (
      company varchar(50),
      product varchar(50),
      inputDate datetime
    )
     
    insert into #temp(company,product,inputDate) values('杭州大明有限公司','汽车1','2010-8-1')
    insert into #temp(company,product,inputDate) values('杭州大明有限公司','汽车2','2010-8-1')
    insert into #temp(company,product,inputDate) values('杭州大明有限公司','汽车3','2010-8-1')
    insert into #temp(company,product,inputDate) values('杭州大明有限公司','汽车4','2010-8-1')
    insert into #temp(company,product,inputDate) values('杭州大明有限公司','汽车5','2010-7-1')
     
    insert into #temp(company,product,inputDate) values('北京小科有限公司','汽车1','2010-8-1')
    insert into #temp(company,product,inputDate) values('北京小科有限公司','汽车2','2010-8-1')
    insert into #temp(company,product,inputDate) values('北京小科有限公司','汽车3','2010-8-1')
    insert into #temp(company,product,inputDate) values('北京小科有限公司','汽车4','2010-8-1')
     
    insert into #temp(company,product,inputDate) values('上海有得有限公司','汽车1','2010-8-1')
    insert into #temp(company,product,inputDate) values('上海有得有限公司','汽车2','2010-8-1')
    insert into #temp(company,product,inputDate) values('上海有得有限公司','汽车3','2010-8-1')
    insert into #temp(company,product,inputDate) values('上海有得有限公司','汽车4','2010-8-1')
     
    insert into #temp(company,product,inputDate) values('天津旺旺有限公司','汽车4','2010-8-1')
    insert into #temp(company,product,inputDate) values('天津旺旺有限公司','汽车5','2010-8-1')
     
     
     
    select * from #temp
     
     
     
     
    create proc getdata
     
    @num int 
    as
     
    begin
     
    select  top 4 *  from  
     
    (
    select ( select count(*) from #temp where company=a.company and product<=a.product) as 序号,a.company,a.product,a.inputDate
    from #temp a 
    ) b 
    where 序号>=@num
     
    order by  序号,inputDate desc
     
    end
     
    go
    getdata 2
     
     
    /*
     
    结果
     
    1    杭州大明有限公司    汽车1    2010-08-01 00:00:00.000
    1    北京小科有限公司    汽车1    2010-08-01 00:00:00.000
    1    上海有得有限公司    汽车1    2010-08-01 00:00:00.000
    1    天津旺旺有限公司    汽车4    2010-08-01 00:00:00.000
     
     
    2    天津旺旺有限公司    汽车5    2010-08-01 00:00:00.000
    2    上海有得有限公司    汽车2    2010-08-01 00:00:00.000
    2    北京小科有限公司    汽车2    2010-08-01 00:00:00.000
    2    杭州大明有限公司    汽车2    2010-08-01 00:00:00.000
     
     
    3    杭州大明有限公司    汽车3    2010-08-01 00:00:00.000
    3    北京小科有限公司    汽车3    2010-08-01 00:00:00.000
    3    上海有得有限公司    汽车3    2010-08-01 00:00:00.000
    4    北京小科有限公司    汽车4    2010-08-01 00:00:00.000
     
     
     
    4    北京小科有限公司    汽车4    2010-08-01 00:00:00.000
    4    上海有得有限公司    汽车4    2010-08-01 00:00:00.000
    4    杭州大明有限公司    汽车4    2010-08-01 00:00:00.000
    5    杭州大明有限公司    汽车5    2010-07-01 00:00:00.000
     
     
    */
     
     
    --sql2005
    create proc getdata2005
    @num int 
    as
    begin
    select  top 4 *  from 
    (
    select row_number() over (partition by company order by product ) as 序号,a.company,a.product,a.inputDate
    from #temp a 
    ) b 
    where 序号>=@num
    order by  序号,inputDate desc
    end
     
     
    getdata2005 4
     
     
     
    select *   from  #temp
     
    select ( select count(*) from #temp where  company+ product<=a.company+a.product) as 序号,a.company,a.product,a.inputDate
    ,a.company+a.product as 唯一标志一行
    from #temp a
    order by company,product
     
    代码
    if object_id(N'company'is not  null
    drop table company
    go
    create table  company 

    (
    companyname 
    varchar(2),
    product    
    varchar(60)
    )

    --公司1
    insert into company
    select 'A','A1' union 
    select 'A','A2' union 
    select 'A','A3' union 
    select 'A','A4' union 
    select 'A','A5' union 
    select 'A','A6' union 
    select 'A','A7' union 
    select 'A','A8' union 
    select 'A','A9' union 
    select 'A','A10'   

    --公司2
    insert into company
    select 'B','B1' union 
    select 'B','B2' union 
    select 'B','B3' union 
    select 'B','B4' union 
    select 'B','B5' union 
    select 'B','B6' union 
    select 'B','B7' union 
    select 'B','B8' union 
    select 'B','B9' union 
    select 'B','B10'  

    --公司3
    insert into company
    select 'C','C1' union 
    select 'C','C2' union 
    select 'C','C3' union 
    select 'C','C4' union 
    select 'C','C5' union 
    select 'C','C6' union 
    select 'C','C7' union 
    select 'C','C8' union 
    select 'C','C9' union 
    select 'C','C10'  

    --公司4
    insert into company
    select 'D','D1' union 
    select 'D','D2' union 
    select 'D','D3' union 
    select 'D','D4' union 
    select 'D','D5' union 
    select 'D','D6' union 
    select 'D','D7' union 
    select 'D','D8' union 
    select 'D','D9' union 
    select 'D','D10'  

    --公司5
    insert into company
    select 'E','E1' union 
    select 'E','E2' union 
    select 'E','E3' union 
    select 'E','E4' union 
    select 'E','E5' union 
    select 'E','E6' union 
    select 'E','E7' union 
    select 'E','E8' union 
    select 'E','E9' union 
    select 'E','E10'  

    --公司6
    insert into company
    select 'F','F1' union 
    select 'F','F2' union 
    select 'F','F3' union 
    select 'F','F4' union 
    select 'F','F5' union 
    select 'F','F6' union 
    select 'F','F7' union 
    select 'F','F8' union 
    select 'F','F9' union 
    select 'F','F10' 

    --公司7
    insert into company
    select 'G','G1' union 
    select 'G','G2' union 
    select 'G','G3' union 
    select 'G','G4' union 
    select 'G','G5' union 
    select 'G','G6' union 
    select 'G','G7' union 
    select 'G','G8' union 
    select 'G','G9' union 
    select 'G','G10' 

    --公司8
    insert into company
    select 'H','H1' union 
    select 'H','H2' union 
    select 'H','H3' union 
    select 'H','H4' union 
    select 'H','H5' union 
    select 'H','H6' union 
    select 'H','H7' union 
    select 'H','H8' union 
    select 'H','H9' union 
    select 'H','H10' 

    --公司9
    insert into company
    select 'I','I1' union 
    select 'I','I2' union 
    select 'I','I3' union 
    select 'I','I4' union 
    select 'I','I5' union 
    select 'I','I6' union 
    select 'I','I7' union 
    select 'I','I8' union 
    select 'I','I9' union 
    select 'I','I10' 

    --公司10
    insert into company
    select 'J','J1' union 
    select 'J','J2' union 
    select 'J','J3' union 
    select 'J','J4' union 
    select 'J','J5' union 
    select 'J','J6' union 
    select 'J','J7' union 
    select 'J','J8' union 
    select 'J','J9' union 
    select 'J','J10' 

    IF (select Object_id('Tempdb..#t')) IS  NULL  
    select identity(int,1,1as id,* into #t  from  company  
    order by  left(product,1),cast(substring(product,2,2)  as int

     

    if  object_id(N'getdata','P'is not null
    drop  table getdata

    go
    create proc getdata
    @num1 int   --第几页    
    as

    begin

    select  companyname,product  from 
     (
    select row_number() over (partition by companyname order by id) as 序号,*
    from #t 
    )  a

    where 序号=@num1
    order by companyname

    end 

    go
    getdata 
    4
    go
    DROP procedure getdata
  • 相关阅读:
    网桥的作用
    PMML辅助机器学习算法上线
    支持度、置信度和提升度
    特征预处理
    特征表达及处理
    卡方检验
    特征工程-特征选择
    AMBARI部署HADOOP集群(4)
    AMBARI部署HADOOP集群(3)
    ambari部署Hadoop集群(2)
  • 原文地址:https://www.cnblogs.com/zhwl/p/2434667.html
Copyright © 2011-2022 走看看