sqlserver分组取前n条记录

   1.前言。

  这个有两种方法。1是用in,2是用row_number(),可根据情况来用。两种都可以。

  2.举例。

  方法1:

  Java代码

  select a.* from table1 a where a.column1 in (select max(column1) from table1 group by a.column2,column3)

  方法2:

  Java代码

  with nyr as (

  select NYR,QYZX_DM,FXSP_XH,SPBM_DLJ,WBSP_GG,JGLX,JZJG,MAX(SJGX_SJ),

  ROW_NUMBER() over (partition by nyr order by nyr) as 'rowno'

  from WD_O_T_IC_SPSJ_FX

  where rowno=1

  group by NYR,QYZX_DM,FXSP_XH,SPBM_DLJ,WBSP_GG,JGLX,JZJG

  order by NYR,QYZX_DM,FXSP_XH,SPBM_DLJ,WBSP_GG,JGLX,MAX(SJGX_SJ) desc )

  select *

  from nyr

  where rowno = 1

时间: 2024-09-20 18:45:27

sqlserver分组取前n条记录的相关文章

mysql使用GROUP BY分组实现取前N条记录的方法_Mysql

本文实例讲述了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

SQLServer 分组查询相邻两条记录的时间差

原文:SQLServer 分组查询相邻两条记录的时间差 首先,我们通过数据库中表的两条记录来引出问题,如下图 以上为一个记录操作记录的表数据.OrderID为自增长列,后面依次为操作类型,操作时间,操作人. 现在的问题是:要求筛选出数据库中从"接收"到"送出"的时间差超过2天的全部记录.即如上图两笔单据中,红色框既是要筛选出的,绿色框为正常过滤的. 为了定位相邻记录,方法为给查询语句的返回记录加个自动编号列放入临时表中,再对临时表进行操作. View Code --

sql中查出每个分组的前n条记录

查询指定分类的前n篇文章 create table `person` (   `person` varchar(10),   `group` int,   `age` int ); insert into `person` values ('Bob', 1, 32), ('Jill', 1, 34), ('Shawn', 1, 42), ('Jake', 2, 29), ('Paul', 2, 36), ('Laura', 2, 39); // 查询语句 SELECT a.person, a.g

在SQL Server2005/2008中对记录进行分组,并获得每组前N条记录

本文为原创,如需转载,请注明作者和出处,谢谢!     假设有一个表,SQL语句如下: CREATE TABLE [dbo].[scan](     [km] [int] NULL,     [kh] [int] NULL,     [cj] [int] NULL ) ON [PRIMARY]     其中km为科目号.kh为考生号.cj为成绩,现对km和kh进行分组,并获得每组前2条记录(按cj从高到低排序).基本思想是为每组加一个序号列,再用where取序号小于等于2的.SQL语句如下: s

sql server的across join语句怎么用?用它怎么取分组结果的第一条记录呢?

问题描述 sql server的across join语句怎么用?用它怎么取分组结果的第一条记录呢? sql server的across join语句怎么用?用它怎么取分组结果的第一条记录呢? 解决方案 http://www.2cto.com/database/201509/442742.html 解决方案二: http://zhidao.baidu.com/link?url=zu-YuSRPF-4RKb_yrqC7cZm4Smbz_pWS31ltTFn6HIknGbUHgcOtH8FavG9o

分页-mysql某个字段排序后按这个字段分组取前10个的数据

问题描述 mysql某个字段排序后按这个字段分组取前10个的数据 需求是按某个字段分组,再按分组分页,取出每页分组里的所有数据. 例如表数据 Id 组名 1 A 2 A 3 B 4 A 5 B 6 C 7 F 8 C 9 D 10 E 11 F 每页取两组数据,第一页结果是 Id 组名 1 A 2 A 4 A 3 B 5 B 第二页结果是 Id 组名 6 C 8 C 9 D 第三页结果是 Id 组名 10 E 7 F 11 F 这有办法用一条sql查吗 解决方案 不知道你的分组的依据是什么,至于

sql 取前几行记录语句

SQLITE数据库:  代码如下 复制代码 select  * from table limit  N db2数据库:  代码如下 复制代码 select * from tab fetch first 10 rows only oracle数据库:  代码如下 复制代码 select * from tab where rownum <=10 sqlserver数据库:  代码如下 复制代码 select top 10 * from tab 1)如果表中有主键,可以用IN的方式.  代码如下 复制

orderby-Oracle 排序后取前10条出错

问题描述 Oracle 排序后取前10条出错 (http://img.ask.csdn.net/upload/201509/25/1443167518_195061.jpg) Oracel中,我想在子查询中先分组,在排序,最后在外层做一个,取排序后结果的前10条结果 解决方案 他说你的语法错误,你检查下语法 解决方案二: 子查询需要命名,就是外层要 select * from (子查询语句)s where .... 解决方案三: order by 的问题,order by 后边不能用子查询的结果

mysql/Oracle/mssql取前几条数据sql写法

如在ms sqlserver 用此语句:  代码如下 复制代码 select top 2 * from test01 Oracle的语句:  代码如下 复制代码 select * from (select rownum r ,* from test) ttwhere tt.r > 50 and tt.r <= 100; (最好用PLSQL游标来解决) DB2中:  代码如下 复制代码 select * from payment fetch first 5 row only --查前5条记录