每个分类取最新的几条的SQL实现代码_MsSql

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) awhere 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

复制代码 代码如下:

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->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,1) as 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

时间: 2024-11-14 11:57:03

每个分类取最新的几条的SQL实现代码_MsSql的相关文章

sql实现每个分类取最新几条语句

在sql使用中,我们可能经常会碰到这样的需求,即每类信息取前几条显示出来. 实现的方法有很多种,但考虑到效率问题.今天我们使用sql server2005里row_number()这个函数. ROW_NUMBER ( ) 函数的语法如下: ROW_NUMBER ( ) OVER ( [ ] ) OVER 子句中的 PARTITION BY 将结果集分为多个分区. OVER 子句中的 ORDER BY 将对 ROW_NUMBER 进行排序. 假如要从article表中得到每个分类的10条数据,并且

C# 取某网站最新的10条新闻

问题描述 如题,求大神给点思路 解决方案 解决方案二:你现在到底是从网页上抓数据不会,还是抓到数据后过滤出最新的10条不会?解决方案三:网页上去抓取不会引用1楼Z65443344的回复: 你现在到底是从网页上抓数据不会,还是抓到数据后过滤出最新的10条不会? 解决方案四: 解决方案五:RSS字符串补丁解决方案六:引用4楼romanchaos的回复: RSS字符串补丁 相当于用网络爬虫去取指定网站,然后再去截取里面的新闻解决方案七:网络爬虫的功能解决方案八:privatestringGetWebC

mysql &amp;quot;group by&amp;quot;与&amp;quot;order by&amp;quot;的研究--分类中最新的内容_数据库其它

这两天让一个数据查询难了.主要是对group by 理解的不够深入.才出现这样的情况 这种需求,我想很多人都遇到过.下面是我模拟我的内容表 复制代码 代码如下: CREATE TABLE `test` ( `id` INT(10) NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL, `category_id` INT(10) NOT NULL, `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMES

python抓取最新博客内容并生成Rss

  本文给大家分享的是使用python抓取最新博客内容并生成Rss的代码,主要用到了PyRSS2Gen方法,非常的简单实用,有需要的小伙伴可以参考下. osc的rss不是全文输出的,不开心,所以就有了python抓取osc最新博客生成Rss ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 4

db2-DB2取100到200条记录无排序(取出数据库中固定的记录)

问题描述 DB2取100到200条记录无排序(取出数据库中固定的记录) 第一种:思路-->>现获取前100条然后查询结果集在这100条意外再取前100条记录. 代码:SELECT * FROM TABLE WHERE ID not in ( SELECT ID FROM TABLE FETCH FIRST 100 ROWS ONLY ) FETCH FIRST 100 ROWS ONLY . 第二种:思路-->>分页技术,给所有记录添加id,然后取101到200条记录. 代码:SE

select-SQL id和no相同的有多条记录时,只取其中的一条,要怎么写查询语句

问题描述 SQL id和no相同的有多条记录时,只取其中的一条,要怎么写查询语句 declare @A table ( id nvarchar(8), [no] nvarchar(8), a_string1 nvarchar(8), a_string2 nvarchar(8) ); insert into @A values('0001','0001','',''); insert into @A values('0001','0001','1111','1111'); insert into

php curl大批量抓取 抓几百条后提示 连接被重置

问题描述 php curl大批量抓取 抓几百条后提示 连接被重置 php curl大批量抓取 抓几百条后提示 连接被重置 怎么弄呢 RECV FAILURE CONNECTION WAS RESET

大数据量下的查找最新的几条数据的通用方法

由于项目需要,需要获取一组数据的的最新一条数据,表结构如下: CREATE TABLE [dbo].[WUSU_SUOLITest_Table](  [ID] [bigint] IDENTITY(1,1) NOT NULL,  [ReceiveTime] [datetime] NULL,  [GroupID] [bigint] NOT NULL,  [DataValue] [float] NULL,  [SensorCode] [char](10) NOT NULL, ) 在这个表上只有两种操作

sql server 数据库有一百万条信息 要取其中的一条 要花多长时间 谁能告诉我呀!

问题描述 sqlserver数据库有一百万条信息要取其中的一条要花多长时间谁能告诉我呀! 解决方案 解决方案二:要据环境测试才行.解决方案三:自己测试下啊解决方案四:你自己测一下.解决方案五:按主键一般都很快的...看电脑具体跑的怎么羊...解决方案六:很少很少的时间,很长很长的时间!解决方案七:应该不会太长,但时间决定于多种环境因素,比如网络速度,机器配置等.解决方案八:没法子,只能自己测,变数太多解决方案九:对,应该好要看你的主体环境啊!解决方案十:要看看每个记录的长度以及类型,一般INT的