SQL Server实现查询每个分组的前N条记录
SQL语句查询每个分组的前N条记录的实现方法:
1、生成测试数据: #T
if object_id('tempdb.dbo.#T') is not null drop table #T; create table #T (ID varchar(3), GID int, Author varchar(29), Title varchar(39), Date datetime); insert into #T select '001', 1, '邹建', '深入浅出SQLServer2005开发管理与应用实例', '2008-05-10' union all select '002', 1, '胡百敬', 'SQLServer2005性能调校', '2008-03-22' union all select '003', 1, '格罗夫Groff.J.R.', 'SQL完全手册', '2009-07-01' union all select '004', 1, 'KalenDelaney', 'SQLServer2005技术内幕存储引擎', '2008-08-01' union all select '005', 2, 'Alex.Kriegel.Boris.M.Trukhnov', 'SQL宝典', '2007-10-05' union all select '006', 2, '飞思科技产品研发中心', 'SQLServer2000高级管理与开发', '2007-09-10' union all select '007', 2, '胡百敬', 'SQLServer2005数据库开发详解', '2008-06-15' union all select '008', 3, '陈浩奎', 'SQLServer2000存储过程与XML编程', '2005-09-01' union all select '009', 3, '赵松涛', 'SQLServer2005系统管理实录', '2008-10-01' union all select '010', 3, '黄占涛', 'SQL技术手册', '2006-01-01' union all select '010', 4, '黄蛋蛋', 'SQL技术手册蛋蛋', '2006-01-01';
2、表记录查询如下:
select * from #T;
结果:
3、按GID分组,查每个分组中Date最新的前2条记录
(1)用子查询
--1.字段ID唯一时: select * from #T as T where ID in (select top 2 ID from #T where GID=T.GID order by Date desc); --2.如果ID不唯一时: select * from #T as T where 2>(select count(*)from #T where GID=T.GID and Date>T.Date);
(2)使用SQL Server 2005 使用新方法ROW_NUMBER()进行排位分组
select ID, GID, Author, Title, Date from( select rid=row_number() over (partition by GID order by Date desc), * from #T) as T where rid<=2;
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
Sql Server 分组统计并合计总数及WITH ROLLUP应用
WITH ROLLUP 在生成包含小计和合计的报表时,ROLLUP 运算符很有用.ROLLUP 运算符生成的结果集类似于 CUBE 运算符所生成的结果集. 复制代码 代码如下: SELECT [Source], COUNT(*) AS OrderTotal FROM [ExternalOrder] Where OrderStatus=1 AND (CheckPayment=1 ) and TicketDate >= '2012-11-1' AND TicketDate < '2012-12-1
-
SQL SERVER 分组求和sql语句
需求:如下图所示 实现sql语句 SELECT A1,SUM(A2*A3) FROM A GROUP BY A1 大家可以自行测试一下,主要需要了解group by语句的用法
-
SQLserver 实现分组统计查询(按月、小时分组)
设置AccessCount字段可以根据需求在特定的时间范围内如果是相同IP访问就在AccessCount上累加. 复制代码 代码如下: Create table Counter ( CounterID int identity(1,1) not null, IP varchar(20), AccessDateTime datetime, AccessCount int ) 该表在这儿只是演示使用,所以只提供了最基本的字段 现在往表中插入几条记录 insert into Counter selec
-
sql server如何利用开窗函数over()进行分组统计
这是一道常见的面试题,在实际项目中经常会用到. 需求:求出以产品类别为分组,各个分组里价格最高的产品信息. 实现过程如下: declare @t table( ProductID int, ProductName varchar(20), ProductType varchar(20), Price int) --测试数据 insert @t select 1,'name1','P1',3 union all select 2,'name2','P1',5 union all select 3,
-
Sql Server:多行合并成一行,并做分组统计的两个方法
复制代码 代码如下: --创建 test 表 ,插入数据 CREATE TABLE test(code varchar(50), [values] varchar(10),[count] int)INSERT test SELECT '001', 'aa',1UNION ALL SELECT '001', 'bb',2UNION ALL SELECT '002', 'aaa',4UNION ALL SELECT '002', 'bbb',5UNION ALL SELECT '002', 'ccc
-
sqlserver巧用row_number和partition by分组取top数据
分组取TOP数据是T-SQL中的常用查询, 如学生信息管理系统中取出每个学科前3名的学生.这种查询在SQL Server 2005之前,写起来很繁琐,需要用到临时表关联查询才能取到.SQL Server 2005后之后,引入了row_number()函数,row_number()函数的分组排序功能使这种操作变得非常简单.下面是一个简单示例: 复制代码 代码如下: --1.创建测试表 create table #score ( name varchar(20), subject varchar(2
-
SQL Server实现查询每个分组的前N条记录
SQL语句查询每个分组的前N条记录的实现方法: 1.生成测试数据: #T if object_id('tempdb.dbo.#T') is not null drop table #T; create table #T (ID varchar(3), GID int, Author varchar(29), Title varchar(39), Date datetime); insert into #T select '001', 1, '邹建', '深入浅出SQLServer2005开发管理
-
SQL Server使用一个语句块批量插入多条记录的三种方法
我们在日常操作中,免不了对数据库的某张表,一次性的要插入多条记录,但是首先想到的就是复制,粘帖N多重复的INSERT INTO 语句,万一某一个少了一个分号,或多个逗号之类的,产生错误,要找起来可就费尽了,既浪费时间,又耽误工作. 除了上面所说的方法外,其实还有二中方法,相比较起来要比之前那个要简洁. 首先是之前那个方法: 复制代码 代码如下: INSERT INTO MyTable(ID,NAME) VALUES(1,'123'); INSERT INTO MyTable(ID,NAME
-
mysql使用GROUP BY分组实现取前N条记录的方法
本文实例讲述了mysql使用GROUP BY分组实现取前N条记录的方法.分享给大家供大家参考,具体如下: MySQL中GROUP BY分组取前N条记录实现 mysql分组,取记录 GROUP BY之后如何取每组的前两位下面我来讲述mysql中GROUP BY分组取前N条记录实现方法. 这是测试表(也不知道怎么想的,当时表名直接敲了个aa,汗~~~~): 结果: 方法一: 复制代码 代码如下: SELECT a.id,a.SName,a.ClsNo,a.Score FROM aa a LEFT J
-
SQL Server查询前N条记录的常用方法小结
本文实例讲述了SQL Server查询前N条记录的常用方法.分享给大家供大家参考.具体如下: SQL Server查询前N条记录是我们经常要用到的操作,下面对SQL Server查询前N条记录的方法作了详细的介绍,如果您感兴趣的话,不妨一看. SQL Server查询前N条记录: 因为id可能不是连续的,所以不能用取得10<id<20的记录的方法. 有三种方法可以实现: 一.搜索前20条记录,指定不包括前10条 语句: 复制代码 代码如下: select top 20 * from tbl w
-
在SQL SERVER中查询数据库中第几条至第几条之间的数据SQL语句写法
今天在写程序的时候,需要生成从开始id到结束id的sql语句.原来不需要这个功能现在就需要了. 在SQL SERVER中查询数据库中第几条至第几条之间的数据SQL语句如何写? 如:在SQL SERVER中查询数据库中第10条至30条之间的数据SQL语句如何写? ------解决方案-------------------- select top 20 * from 表 where id in (select top 30 id from 表 order by id)order by id desc
-
SQL Server 分页查询通用存储过程(只做分页查询用)
自开始做项目以来,一直在用.这段存储过程的的原创者(SORRY,忘记名字了),写得这段SQL代码很不错,我在这个基础上,按照我的习惯以及思维方式,调整了代码,只做分页查询用. /*---------------------------------------------- *procedure name : P_PageResult * author :Fay * create date : 2014-07-18 */ CREATE PROCEDURE prcPageResult -- 获得某一
-
SQL Server模糊查询的常见方法总结
在数据查询的时候,有完整查询和模糊查询之分.在Access和SQL Server中使用模糊查询有一下几种查询: 1.用_通配符查询 "_"号表示任意单个字符,该字符号只能匹配一个字符,利用"_"号可以作为通配符组成匹配模式进行查询."_"符号可以放在查询条件 的任意位置,且只能代表一个字符. 例如:查询数学成绩在大于或等于80的同学 selecT * FROM StuScore WHERE Math_Score like '8_' 2利用%通配符
-
SQL Server子查询的深入理解
当由where子句指定的搜索条件指向另一张表时,就需要使用子查询或嵌套查询. 1 子查询 子查询是一个嵌套在select.insert.update或delete语句或其他子查询中的查询.任何允许使用表达式的地方都可以使用子查询. 1.1语法规则: 子查询的select查询总使用圆括号括起来不能包括compute或for browse子句如果同时指定top子句,则可能只包括order by子句子查询最多嵌套32层,个别查询可能会不支持32层嵌套任何可以使用表达式的地方都可以使用子查询,主要它返回
-
SQL Server连接查询的实用教程
前沿小补充 例3.48 查询平均成绩大于等于80分的学生学号和平均成绩 SELECT Sno,AVG(Grade) FROM SC WHERE AVG(Grade)>=80 GROUP BY Sno; SELECT * FROM SC; 此时发现: 这是因为WHERE子句中是不能用聚集函数作为条件表达式的,正确的查询语句应该是: SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno HAVING AVG(Grade)>=80; SELECT * FROM SC;
-
解决mybatis一对多查询resultMap只返回了一条记录问题
问题描述:因为领导的一个需求,需要用到使用resultMap,很久没使用了,结果就除了点意外.就记录下这个问题 准备两个类:author(作者)和book(书),数据库创建对应的author->book一对多的数据 @Data public class Author { private Integer id; private String name; private String phone; private String address; private List<Book> book
随机推荐
- JSP程序使用JDBC连接MySQL的教程
- JavaScript 字符编码规则
- asp.net中Request.QueryString与Request.Param的区别分析
- 一个用于网络的工具函数库
- Python3写入文件常用方法实例分析
- JSP基于dom解析xml实例详解
- 递归形式与非递归形式的斐波那契数列的用法分析
- PHP中抽象类和抽象方法概念与用法分析
- 基于RxJava实现酷炫启动页
- 微信小程序 实例应用(记账)详解
- Access的跨库查询 (图)
- 高效Web开发的10个jQuery代码片段
- jQuery Mobile页面返回不需要重新get
- node.js学习之交互式解释器REPL详解
- 诱人视频请君入瓮 解析RealPlayer溢出漏洞
- java list与数组之间的转换详细解析
- springmvc下实现登录验证码功能示例
- 解析CI即CodeIgniter框架在Nginx下的重写规则
- 浅析Android手机卫士手机定位的原理
- Python实现求解一元二次方程的方法示例