`
xiaoer_1982
  • 浏览: 1811902 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

求一列数字的分区最大值与最小值

阅读更多

我有一个表
num
001
002
003
004
007
008
009

我想让他们变成区间形式
a b
001 004
007 009
如何才能办到,我需要的是一条sql语句

declare @t table(num varchar(10))
insert into @t select '001'
insert into @t select '002'
insert into @t select '003'
insert into @t select '004'
insert into @t select '007'
insert into @t select '008'
insert into @t select '009'

--法一:钻钻libin_ftsafe
select
a.num
as [a],min(b.num) as [b]
from
(
select * from @t t where not exists(select 1 from @t where num=t.num-1)) a,
(
select * from @t t where not exists(select 1 from @t where num=t.num+1)) b
where
a.num
<=b.num
group by a.num /*
a b
---------- ----------
001 004
007 009
*/

--法二:.net小鸟

declare @T table(num varchar(10))
insert into @T
select '001' union all
select '002' union all
select '003' union all
select '004' union all
select '007' union all
select '008' union all
select '009'

declare @T table(num varchar(10))
insert into @T
select '001' union all
select '002' union all
select '003' union all
select '004' union all
select '007' union all
select '008' union all
select '009'

select min(num) as a,max(num) as b from
(
select px = row_number() over(order by num),*
from @T
)T
group by cast(num as int)-px
/*
001 004
007 009
*/

--法三:每天进步一点点
DECLARE @TB TABLE([num] VARCHAR(3))
INSERT @TB
SELECT '001' UNION ALL
SELECT '002' UNION ALL
SELECT '003' UNION ALL
SELECT '004' UNION ALL
SELECT '007' UNION ALL
SELECT '008' UNION ALL
SELECT '009'

;
WITH CTE AS
(
SELECT *,ID=ROW_NUMBER() OVER (ORDER BY num) FROM @TB
)
,CTE2
AS
(
SELECT TOP 1 *,GRP=ID FROM CTE WHERE ID=1
UNION ALL
SELECT B.*,CASE WHEN B.num=C.num+1 THEN GRP ELSE GRP+1 END FROM CTE AS B,CTE2 AS C WHERE B.ID=C.ID+1
)
SELECT MIN(num) AS a,
MAX(num) AS b
FROM CTE2
GROUP BY GRP
/*
a b
---- ----
001 004
007 009
*/

--法四:

if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([num] varchar(10))
insert [tb] select '001'
union all select '002'
union all select '003'
union all select '004'
union all select '007'
union all select '008'
union all select '009'
go

--增加辅助字段
alter table tb add fid int
go
--更新字段值
declare @i int,@j int
update tb set fid=@i,@i=case when @j=isnull(cast(num as int),0)-1 then isnull(@i,0) else isnull(@i,0)+1 end,@j=isnull(cast(num as int),0)
go
--查询
select a=min(num),b=max(num) from tb group by fid
--结果
/*

a b
---------- ----------
001 004
007 009

(2 行受影响)
*/
--删除辅助字段
alter table tb drop column fid
go

分享到:
评论

相关推荐

    EXCEL集成工具箱V6.0

    【综合计算显示】 综合计算并显示选中区域存储格的最大值、最小值、平均值、求和、存储格个数、筛选状态下的的加总求和,以及显示选区包含的数字、字符、汉字的个数等信息。 【GB2转BIG5】 将选中区域存储格的简体...

    EXCEL集成工具箱V8.0完整增强版(精简)

    【综合计算显示】 综合计算并显示选中区域存储格的最大值、最小值、平均值、求和、存储格个数、筛选状态下的的加总求和,以及显示选区包含的数字、字符、汉字的个数等信息。 【GB2转BIG5】 将选中区域存储格的简体...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     数据定义语言Data Definition Language(DDL),用来建立数据库、数据对象和定义其列。例如:CREATE、DROP、ALTER等语句。  数据操作语言Data Manipulation Language(DML),用来插入、修改、删除、查询,可以...

    Oracle9i的init.ora参数中文说明

    小数分隔符用来将一个数字的整数部分与小数部分分隔开。其格式是 &lt;decimal_character&gt;&lt;group_separator&gt;。 值范围: 任何单字节字符, '+', '-', ', '&gt;' 除外。 默认值: 从 NLS_TERRITORY 中获得 nls_sort: 说明: ...

    700个批处理打包下载.rar

    求一列数所有不同组合的和.cmd 求最大公约数和最小公倍数.cmd 注册右键.reg 测试网络是否通畅.cmd 添加环境变量.cmd 清空指定大小的文件夹.cmd 清除威金(logo_1,熊猫烧香)病毒最新变种工具.bat 清除熊猫内存病毒....

    Big-Data-Experiments:Hadoop和Map Reduce中的大数据分配和项目

    4.查找大量数字的最小值,最大值和中位数 使用自定义分区程序来区分自然键和排序键。 5.找到两个巨大的稀疏矩阵相乘的结果矩阵 数据中的每一行都具有以下形式: A,0、172、5 在此,A是该行所属的矩阵。 0是行号。...

    大量批处理实用程序例程

    求一列数所有不同组合的和.cmd 求最大公约数和最小公倍数.cmd 用随机数做四则运算.cmd 百钱买百鸡的买法.cmd 计算2的N次方.cmd 计算开方.cmd 计算正浮点数的和.cmd 计算花费的时间.cmd YS从桌面复制文件到其他地方....

    C程序范例宝典(基础代码详解)

    实例066 使用指针查找数列中最大值、最小值 83 实例067 用指针数组构造字符串数组 84 实例068 将若干字符串按照字母顺序输出 85 2.3 指针与函数 86 实例069 用指向函数的指针比较大小 86 实例070 使用...

    parquet-index:Parquet表的Spark SQL索引

    实木复合地板指数 Parquet表的Spark SQL索引 总览 包允许为Parquet表创建索引(作为和),以减少在Spark SQL中用于几乎交互式分析或点查询时的查询延迟。 它设计用于表不经常... 分区修剪后会应用最小值/最大值统计信

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    8.6.1 例子:使用First_value来计算最大值 206 8.6.2 例子:使用Last_value来计算最小值 207 8.7 其他分析函数 207 8.7.1 Nth_value(11gR2) 207 8.7.2 Rank 209 8.7.3 Dense_rank 210 8.7.4 Row_number 211 ...

    高性能MySQL(第3版).part2

    6.5.8最大值和最小值优化231 6.5.9在同一个表上查询和更新232 6.6查询优化器的提示(hint)232 6.7优化特定类型的查询236 6.7.1优化COUNT()查询236 6.7.2优化关联查询239 6.7.3优化子查询239 6.7.4优化...

    html入门到放弃笔记

    1、创建一个 div 标记 ,增加属性 ,设置 align 属性的值为 center ,设置 id 属性的值为 container,设置 title 属性的值为 这是一个div 这是一个div"&gt; 四大标准属性: 1、id :定义元素在页面中独一无二的...

    sysinternals 工具集合 (20090226版)

    除了使您能够控制工作集大小的最小值和最大值,它还允许您重置缓存的工作集,强制它在必要时从一个最小的起点开始增长。CacheSet 的更改会对缓存的大小立即产生影响。注意:要在 NT 4.0 Service Pack 4 上使用 Cache...

    matlab集成c代码-TSBO:两阶段贝叶斯优化

    该脚本以Dx2矩阵的形式将D维样本空间作为输入,其中各列代表每个参数的样本空间的最小值和最大值,并将其划分为2 ^ D个新区域。 输出是Dx2x(2 ^ D)矩阵,其中每个Dx2矩阵都包含输入的Dx2样本空间的一部分。 ...

    电脑变慢de完全解决方案.

    有见及此,用户最好自定虚拟内存的最小值和最大值,避免经常变换大小。要设定虚拟内存,在“我的电脑”上按右键选择“属性”,在“高级”选项里的“效能”的对话框中,对“虚拟内存”进行设置。  3、检查应用软件...

Global site tag (gtag.js) - Google Analytics