SQL Server 获取每组中的前N个

转载 2015年07月11日 09:25:23

方法一:

--建立测试环境 
create table ta3(id varchar(4),repairvalue numeric(4,2),pieceid varchar(2),facid varchar(8)) 
insert into ta3 
select '01',4.6,'1','aaa' 
union all select '02',2,'1','aaa' 
union all select '03',0,'1','aaa' 
union all select '04',3,'1','aaa' 
union all select '05',5,'1','aaa' 
union all select '06',4.6,'2','aaa' 
union all select '07',7.8,'2','aaa' 
union all select '08',0,'2','aaa' 
union all select '09',5,'2','aaa' 
union all select '10',3,'2','aaa' 
--测试 
Select id,repairvalue,pieceid from ta3 A 
Where Not Exists(Select 1 from ta3 Where pieceid=A.pieceid And repairvalue>A.repairvalue Having Count(1)>2) --这里N取3
Order By pieceid,repairvalue Desc 
--删除测试环境 
Drop Table ta3 
--结果 
/* 
id repairvalue pieceid 
05 5.00 1 
01 4.60 1 
04 3.00 1 
07 7.80 2 
09 5.00 2 
06 4.60 2 
*/ 

方法二:




if object_id('tb') is not null
   drop table tb
go


create table tb
([id] int, [title] numeric(12,1), [typeid] int, [datetime] int)


insert into tb
select 1,1.1,1,1
union all select 2,1.2,1,2
union all select 3,1.3,1,3
union all select 4,2.1,2,4
union all select 5,2.2,2,5
union all select 6,2.3,2,6
union all select 7,3.1,3,7
union all select 8,3.2,3,8
union all select 9,3.3,3,9


select *
from
(
select *,
       
       --先按typeid分组,在一组中按照datetime降序排列,来编号
       ROW_NUMBER() over(partition by typeid 
                             order by datetime desc)  as rownum
from tb
)t
where rownum<=2  --取行号为1和2的,也就是时间最大的2条数据


/*
id<span style="white-space:pre">	</span>title<span style="white-space:pre">	</span>typeid<span style="white-space:pre">	</span>datetime<span style="white-space:pre">	</span>rownum
3<span style="white-space:pre">	</span>1.3<span style="white-space:pre">	</span>1<span style="white-space:pre">	</span>3<span style="white-space:pre">	</span>1
2<span style="white-space:pre">	</span>1.2<span style="white-space:pre">	</span>1<span style="white-space:pre">	</span>2<span style="white-space:pre">	</span>2
6<span style="white-space:pre">	</span>2.3<span style="white-space:pre">	</span>2<span style="white-space:pre">	</span>6<span style="white-space:pre">	</span>1
5<span style="white-space:pre">	</span>2.2<span style="white-space:pre">	</span>2<span style="white-space:pre">	</span>5<span style="white-space:pre">	</span>2
9<span style="white-space:pre">	</span>3.3<span style="white-space:pre">	</span>3<span style="white-space:pre">	</span>9<span style="white-space:pre">	</span>1
8<span style="white-space:pre">	</span>3.2<span style="white-space:pre">	</span>3<span style="white-space:pre">	</span>8<span style="white-space:pre">	</span>2
*/


分组查询取每组前n条记录实例

假设有这样一张运动员比赛成绩表 tb_score 现在要求查询出每个国家的前三名的成绩记录,查询语句可以这样写: 1、 select t3.id,t3.country,t3.score ...
  • zhutulang
  • zhutulang
  • 2015年09月23日 15:17
  • 3460

sql 分组取每组的前n条或每组的n%(百分之n)的数据

sql 分组取每组的前n条或每组的n%(百分之n)的数据 sql 关键字: SELECT * ,ROW_NUMBER() OVER(partition by b.UserID order by...
  • liudong8510
  • liudong8510
  • 2014年04月24日 16:22
  • 3727

[MySQL]分组后查找每组的前N条记录语句

分组后查找每组的前N条记录语句    作者:张守磊  Java代码   考你一条sql语句   如有表 student    id  name age  class    ...
  • d8681148
  • d8681148
  • 2016年06月01日 22:44
  • 624

sql 分组查询 分组查询查询每组的前几条数据

sqlserver: select * from ( select *,row_number() over(partition by 分组列 order by 组内排序列) as rowNum fro...
  • qq87802343
  • qq87802343
  • 2016年04月19日 17:53
  • 686

sql server 分组,取每组的前几行数据

sql中group by或,获取每组中的前N行数据,目前我知道的有2种方法 比如有个成绩表: 里面有字段学生ID,科目,成绩。我现在想取每个科目的头三名。   1.   子查询 select * f...
  • u010032648
  • u010032648
  • 2016年05月20日 22:01
  • 5772

Mysql获取每组前N条记录

Select基础知识 我们在实现select语句的时候,通用的sql格式如下: select *columns* from *tables* where *predicate* ...
  • zinss26914
  • zinss26914
  • 2016年10月21日 17:53
  • 4571

快速删除表中前几行的方法(sql server 2008)

---快速删除表中前几行的方法(sql server 2008) if object_id('tb') is not null drop table tb go create table tb ...
  • hovy_yang
  • hovy_yang
  • 2011年10月13日 11:36
  • 1428

sqlsever中查询当前时间至前N天的数据

--查询当天:  select * from info where DateDiff(dd,datetime,getdate())=0    --查询24小时内的:  sele...
  • caixiajia
  • caixiajia
  • 2016年12月13日 23:32
  • 631

sql分组后查找每组的前几条记录语句

常用的sqlserver,mysql,oracle等数据库sql语句都是遵循sql标准,但是每种数据库都有自己的特点。 如果想做到程序兼容性更好,后期维护更方便,还是建议尽量使用各种数据库通用的sql...
  • jinjin603
  • jinjin603
  • 2016年06月01日 11:32
  • 2231

[mysql] 先按某字段分组再取每组中前N条记录

From: http://blog.chinaunix.net/uid-26729093-id-4294287.html 请参考:http://bbs.csdn.net/topics/3300212...
  • changgongzhao
  • changgongzhao
  • 2015年12月20日 09:59
  • 1567
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL Server 获取每组中的前N个
举报原因:
原因补充:

(最多只允许输入30个字)