SQL查询连续号码段的巧妙解法

2016-02-19 11:48 6 1 收藏

下面,图老师小编带您去了解一下SQL查询连续号码段的巧妙解法,生活就是不断的发现新事物,get新技能~

【 tulaoshi.com - 编程语言 】

在ITPUB上有一则非常巧妙的SQL技巧,学习一下,记录在这里。
最初的问题是这样的:
我有一个表结构,
fphm,kshm
2014,00000001
2014,00000002
2014,00000003
2014,00000004
2014,00000005
2014,00000007
2014,00000008
2014,00000009
2013,00000120
2013,00000121
2013,00000122
2013,00000124
2013,00000125 
(第二个字段内可能是连续的数据,可能存在断点。)
怎样能查询出来这样的结果,查询出连续的记录来。
就像下面的这样?
2014,00000001,00000005
2014,00000009,00000007
2013,00000120,00000122
2013,00000124,00000125
ITPUB上的朋友给出了一个非常巧妙的答案:
SELECT b.fphm, MIN (b.kshm) Start_HM, MAX (b.kshm) End_HM
FROM (SELECT a.*, TO_NUMBER (a.kshm - ROWNUM) cc
      FROM (SELECT *
            FROM t
            ORDER BY fphm, kshm) a
    ) b
GROUP BY b.fphm, b.cc

来源:https://www.tulaoshi.com/n/20160219/1598640.html

延伸阅读
一般模糊查询语句如下: 代码如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1,% :表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。 比如 SELECT * FROM [user] WHERE u_name LIKE '%三%' 将会把u_name为“张三”,“张猫三”、...
具体操作: 根据master.dbo.sysprocesses中的spid和blocked查找当前阻塞语句的主人,然后使用DBCC INPUTBUFFER ()查看阻塞语句。 例子: 打开三个查询分析器 A、B、C 创建一个测试用的表 testDia Create Table testDia(ID int); 在A执行以下语句: Begin tran Insert Into testDia Values(1); 在B执行以下语句: Select * from t...
Oracle 9i提供了很多函数可以用来辅助数据查询。接下来我们介绍常用的函数功能及使用方法。 4.5.1 函数 在输入select mgr, mgr/100,ceil(mgr/100) from scott.emp;,然后单击按钮,出现如图4.29所示的结果。 :\第4章\4.5\451.sql。 函数用法:ceil(n),取大于等于数值n的最小整数。 4.5.2 函数 在输入s...
Oracle 10g新增了阶层查询操作符PRIOR,CONNECT_BY_ROOT ■PRIOR 阶层查询的CONNECY BY condition的条件式需要用到PRIOR来指定父节点, 作为运算符,PRIOR和加(+)减(-)运算的优先级相同。 ■阶层查询 语法:START WITH condition CONNECT BY NOCYCLE condition START WITH 指定阶层的根 CONNECT BY 指定阶层的父/子关系 NOCYCLE...
标签: SQLServer
在Access中进行时间的比较sql语句很简单,如Select * From table Where thetime#"& Now() &"#这样即可     在MSSQL就不能这样,要用DateDiff语句和GetDate()函数进行比较。     如Select Count(*) From table Where DateDiff(s,GetDate(),thetime)0,我自己特别做了个50万条数据的的表,执...

经验教程

855

收藏

93
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部