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

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介:

本文为原创,如需转载,请注明作者和出处,谢谢!

    假设有一个表,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语句如下:
select  *  from 
(
     select a.km,a.kh,cj,row_number()  over(partition  by a.km  order  by a.km,a.cj  desc) n
     from 
        ( select km,kh, SUM(cj) cj  from scan  group  by km,kh) a 
) b  where n <= 2  order  by km, cj  desc

最后得到的结果集如下图所示。


本文转自银河使者博客园博客,原文链接http://www.cnblogs.com/nokiaguy/archive/2009/11/03/1594919.html如需转载请自行联系原作者


银河使者

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
6月前
|
SQL
sql server模糊查询、分组
sql server模糊查询、分组
|
6月前
|
SQL 大数据 HIVE
每天一道大厂SQL题【Day10】电商分组TopK实战
每天一道大厂SQL题【Day10】电商分组TopK实战
67 0
|
30天前
|
SQL
创建分组总计查询的SQL技巧与方法
在SQL中,创建分组总计查询(也称为聚合查询)是一项非常基础且重要的技能
|
4月前
|
SQL 数据挖掘 数据库
SQL分组函数
【7月更文挑战第24天】SQL分组函数
36 1
|
3月前
|
SQL
SQL SERVER数据分组后取第一条数据——PARTITION BY
SQL SERVER数据分组后取第一条数据——PARTITION BY
131 0
|
4月前
|
SQL 数据库
【SQL】已解决:SQL分组去重并合并相同数据
【SQL】已解决:SQL分组去重并合并相同数据
80 1
|
4月前
|
SQL 关系型数据库 MySQL
MySQL获取分组里的最新数据如何写sql
MySQL获取分组里的最新数据如何写sql
47 0
|
5月前
|
SQL
sql语句按指定某个字段分组后删除重复数据只保留id最小/最大的一条数据
sql语句按指定某个字段分组后删除重复数据只保留id最小/最大的一条数据
121 0
|
6月前
|
SQL 关系型数据库 MySQL
简简单单 My SQL 学习笔记(2)——分组和简单数据的查询
简简单单 My SQL 学习笔记(2)——分组和简单数据的查询
|
6月前
|
SQL HIVE
【Hive SQL 每日一题】分组排名取值
创建了一个名为`sales_data`的测试表,包含商品ID、销售额和销售日期。展示了部分示例数据。接着,提供了三个SQL查询:1) 查找每个商品销售额最高的记录;2) 获取每个商品最近和最远的销售记录;3) 求每个商品距今第二近的销售记录。每个查询都利用了窗口函数来处理数据,并给出了相应的查询结果图。
87 1