SQL Server 按某一字段分组 取 最大 (小)值所在行的数据
SQL Server 按某一字段分组 取 最大 (小)值所在行的数据 -- 按某一字段分组 取 最大 (小)值所在行的数据 -- (爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 2007-10-23于浙江杭州) /* 数据如下:name val memoa 2 a2(a的第二个值)a 1 a1--a的第一个值a 3 a3:a的第三个值b 1 b1--b的第一个值b 3 b3:b的第三个值b 2 b2b2b2b2b 4 b4b4b 5 b5b5b5b5b5*/-- 创建表并插入数据: create table tb(name varchar ( 10 ),val int ,memo varchar ( 20 ))insert into tb values ( ' a ' , 2 , ' a2(a的第二个值) ' )insert into tb values ( ' a ' , 1 , ' a1--a的第一个值 ' )insert into tb values ( ' a ' , 3 , ' a3:a的第三个值 ' )insert into tb values ( ' b ' , 1 , ' b1--b的第一个值 ' )insert into tb values ( ' b ' , 3 , ' b3:b的第三个值 ' )insert into tb values ( ' b ' , 2 , ' b2b2b2b2 ' )insert into tb values ( ' b ' , 4 , ' b4b4 ' )insert into tb values ( ' b ' , 5 , ' b5b5b5b5b5 ' )go -- 一、按name分组 取 val最大 的值所在行的数据。 -- 方法1: select a. * from tb a where val = ( select max (val) from tb where name = a.name) order by a.name-- 方法2: select a. * from tb a where not exists ( select 1 from tb where name = a.name and val > a.val)-- 方法3: select a. * from tb a,( select name, max (val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name-- 方法4: select a. * from tb a inner join ( select name , max (val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name-- 方法5 select a. * from tb a where 1 > ( select count ( * ) from tb where name = a.name and val > a.val ) order by a.name/* name val memo ---------- ----------- -------------------- a 3 a3:a的第三个值b 5 b5b5b5b5b5*/-- 二、按name分组 取 val最小的值所在行的数据。 -- 方法1: select a. * from tb a where val = ( select min (val) from tb where name = a.name) order by a.name-- 方法2: select a. * from tb a where not exists ( select 1 from tb where name = a.name and val < a.val)-- 方法3: select a. * from tb a,( select name, min (val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name-- 方法4: select a. * from tb a inner join ( select name , min (val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name-- 方法5 select a. * from tb a where 1 > ( select count ( * ) from tb where name = a.name and val < a.val) order by a.name/* name val memo ---------- ----------- -------------------- a 1 a1--a的第一个值b 1 b1--b的第一个值*/-- 三、按name分组 取 第一次出现的行所在的数据。 select a. * from tb a where val = ( select top 1 val from tb where name = a.name) order by a.name/* name val memo ---------- ----------- -------------------- a 2 a2(a的第二个值)b 1 b1--b的第一个值*/-- 四、按name分组 随机取 一条数据。 select a. * from tb a where val = ( select top 1 val from tb where name = a.name order by newid ()) order by a.name/* name val memo ---------- ----------- -------------------- a 1 a1--a的第一个值b 5 b5b5b5b5b5*/-- 五、按name分组 取 最小的两个(N个)val select a. * from tb a where 2 > ( select count ( * ) from tb where name = a.name and val < a.val ) order by a.name,a.valselect a. * from tb a where val in ( select top 2 val from tb where name = a.name order by val) order by a.name,a.valselect a. * from tb a where exists ( select count ( * ) from tb where name = a.name and val < a.val having Count ( * ) < 2 ) order by a.name/* name val memo ---------- ----------- -------------------- a 1 a1--a的第一个值a 2 a2(a的第二个值)b 1 b1--b的第一个值b 2 b2b2b2b2*/SQL Server 按某一字段分组 取 最大 (小)值所在行的数据的更多相关文章
- mysql按某一字段分组取最大(小)值所在行的数据
mysql按某一字段分组取最大(小)值所在行的数据 mysql技巧--按某一字段分组取最大(小)值所在行的数据,这是mysql数据库程序员经常用到的在处理一些报表数据时候可以活用!那么猎微网将总结 ...
- SQL Server数据库自增字段正确的插入值的描述
我们今天主要向大家讲述的是SQL Server数据库之向SQL Server自增字段正确的插入值的实际操作步骤,在一般的情况下,我们不能向 SQL Server 数据库自增字段中插入值,如果非要这么干 ...
- SQL Server数据库————连接查询和分组查询
SQL Server数据库————连接查询和分组查询 分组查询 select 列from <表名> where …… group by 列 注意:跟order by一样group ...
- SQL Server表描述 及 字段描述的增、删、改、查询
SQL Server表描述 及 字段描述的增.删.改.查询 --测试: --创建表及描述信息 ),isname )) --为表添加描述信息 EXECUTE sp_addextendedproperty ...
- SQL SERVER 表添加新字段
SQL SERVER 表添加新字段 ALTER TABLE doc_exa ADD column_b VARCHAR(20) NULL; -- doc_exa 是表名 -- column_b 是新加的 ...
- SQL Server的镜像是基于物理块变化的复制 镜像Failover之后数据的预热问题
SQL Server的镜像是基于物理块变化的复制 镜像Failover之后数据的预热问题 基于物理块变化的复制,没有并行也是很快的. 逻辑复制的日志是按事务结束的时间排序的,而物理复制是与事务无关的, ...
- SQL SERVER技术内幕之8 分组集
分组集就是分组(GROUP BY子句)使用的一组属性,在传统的SQL中,一个聚合查询只能定义一个分组集: 假设现在不想生成4个单独的结果集,而是希望生成一个统一的结果集,其中包含所有4个分组集的聚合 ...
- oracle 根据字段分组取第一条数据及rank函数说明
当前有这样一个需求,根据外键对子表数据进行分组,取每组中的一条数据就行了,如图: 如:COMMANDID = 26的有两条,只取一条数据. sql语句: select * from(select SY ...
- [转]Sql Server 给表与字段添加描述
/* 在SQL语句中通过系统存储过sp_addextendedproperty可为表字段添加上动态的说明(备注)下面是SQL SERVER帮助文档中对sp_addextendedproperty存储过 ...
随机推荐
- 在centos6.5中安装jdk
一.下载jdk 下载地址 www.oracle.com,我这次安装的jdk是1.6版本的,以.bin结尾的,名称为 jdk-6u45-linux-i586.bin 二.安装步骤 1.在 /usr目录下 ...
- 【数位统计】之【spoj1433 KPSUM】
[spoj1433]KPSUM 来源 高逸涵<数位计数问题解法研究> 由于自己的数位计数类的问题实在太差了,所以把例2用markdown抄写并补充了一遍. 题意 将写在纸上,然后在相邻的数 ...
- mouseover,mouseenter,mouseleave,mouseout
mouseover和mouseout对应 //鼠标移入移出触发该元素及子元素 mouseenter和mouseleave对应 //鼠标移入移出只触发该元素 看完例子即可知道其区别: mouseover ...
- jQuery 请指出'.bind()','.live()'和'.delegate()'的区别
http://kb.cnblogs.com/page/94469/网上好多类似的 简言之bind可以绑定页面上已有的,live和delegate可以绑定到还未存在于页面中的元素之上.delegate又 ...
- 读书笔记2:HTTP协议
HTTP是什么 HTTP定义 HTTP( Hypertext Transfer Protocol, 超文本传输协议) 是在万维网上进行通信时所使用 的协议方案. HTTP的地位 了解HTTP协议的地位 ...
- javascript DOM操作HTML文档
文档对象模型(DOM)是W3C为解决浏览器混战时代不同浏览器环境之间的差别而制定的模型标准.W3C将文档对象模型定义为:是一个能让程序和脚本动态 访问和更新文档内容.结构和样式的语言平台.提供了标准的 ...
- 怎样打造一个分布式数据库——rocksDB, raft, mvcc,本质上是为了解决跨数据中心的复制
摘自:http://www.infoq.com/cn/articles/how-to-build-a-distributed-database?utm_campaign=rightbar_v2& ...
- 百度Tera数据库介绍——类似cassandra,levelDB
转自:https://my.oschina.net/u/2982571/blog/775452 设计背景 百度的链接处理系统每天处理万亿级的超链数据,在过去,这是一系列Mapreduce的批量过程,对 ...
- BZOJ4033 [HAOI2015]T1
令$f[p][i]$表示以$p$为根的子树内,选了$i$个黑点,剩下的都是白点的这个子树内贡献的答案 如果$p$的子树都算出来了,只要计算$p$与$fa[p]$之间的边对答案的贡献就好了,贡献是$di ...
- Jquery表单提交方式
1.使用调用submit方法 function tes1(){ //执行判断 if(校验通过){ $("#formId").submit(); }else{ return; } } ...