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存储过 ...
随机推荐
- java 异常2
自定义异常类: import java.util.Scanner; /** * Created by lenovo on 2016/8/12. */ class NoMoneyException ex ...
- js的预编译机制
1.var定义的是“当前作用域下的一个变量”,当在函数内部不使用var声明时,会被当做全局变量而不是函数内的局部变量(严格模式下还会报错) 2.js的预编辑:[对定义式函数]直接创建为作用域上的函数变 ...
- ArcMap上发布地图服务前,“将图形转为要素的选项”时报“输出名称无效”错误
发布ArcMap服务时,由于矢量图中包含“文本标注”. 发布矢量图服务时,报了一个“00017: 数据框中至少有一个包含图形的已启用注记组”的错误,如下图: 官网给出的解决办法如下:http://re ...
- css--block formatting context
block formatting context(块级格式化上下文) 如何产生BFC:当一个HTML元素满足下面条件的任何一点,都可以产生Block Formatting Context: float ...
- ThreadLocal 那点事儿
原文出处: 黄勇 ThreadLocal,直译为“线程本地”或“本地线程”,如果你真的这么认为,那就错了!其实,它就是一个容器,用于存放线程的局部变量,我认为应该叫做 ThreadLocalVaria ...
- Hbase0.98的环境搭建
0 安装前提: jDK7 ,hadoop1.1.2 1 下载与hadoop对应的hbase版本: http://mirror.bit.edu.cn/apache/hbase/hbase-0.98.12 ...
- BZOJ1507 [NOI2003]Editor
是一道裸的Splay(反正我不会Splay,快嘲笑我!) 只需要维护在数列上加点删点操作即可,不会写Splay的渣渣只好Orz iwtwiioi大神一下了.(后来发现程序直接抄来了...) 就当我的第 ...
- [整][转]Invoke和BeginInvoke的使用
在Invoke或者BeginInvoke的使用中无一例外地使用了委托Delegate. 一.为什么Control类提供了Invoke和BeginInvoke机制? 关于这个问题的最主要的原因已经是do ...
- PHP中的include、include_once、require、require_once
include.include_once().require.require_once() 作用: 通过 include 或 require 语句,可以将 PHP 文件的内容插入另一个 PHP 文件( ...
- js中Array自定义contains, indexOf, delete方法.
Array.prototype.contains = function (elem) { for (var i = 0; i < this.length; i++) { if (this[i] ...