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
  • 相关阅读:
    JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版下载
    Apache HttpComponents Client 4.0快速入门/升级-2.POST方法访问网页
    HttpClient_4 用法 由HttpClient_3 升级到 HttpClient_4 必看
    Eclipse中设置编码的方式
    javadoc简介
    正则表达式:网页爬虫:从TXT中获取邮箱地址(获取的练习,缺点:一行只能匹配一个)
    Linux系统中yum 命令讲解
    查看CentOS版本信息
    Linux系统下安装JDK
    Linux基础性笔记
  • 原文地址:https://www.cnblogs.com/zengxiangzhan/p/1639886.html
Copyright © 2011-2022 走看看