sql从某不连续的数字中将其分段并找出缺失的数字并分段
- 首先做准备数据
CREATE TABLE #tempsource(col NVARCHAR(100)) INSERT INTO #tempsource (col) VALUES('')
INSERT INTO #tempsource (col) VALUES('')
INSERT INTO #tempsource (col) VALUES('')
INSERT INTO #tempsource (col) VALUES('')
INSERT INTO #tempsource (col) VALUES('')
INSERT INTO #tempsource (col) VALUES('')
INSERT INTO #tempsource (col) VALUES('')
INSERT INTO #tempsource (col) VALUES('')
INSERT INTO #tempsource (col) VALUES('')
INSERT INTO #tempsource (col) VALUES('')
INSERT INTO #tempsource (col) VALUES('')
INSERT INTO #tempsource (col) VALUES('')
INSERT INTO #tempsource (col) VALUES('')
INSERT INTO #tempsource (col) VALUES('')
INSERT INTO #tempsource (col) VALUES('')
INSERT INTO #tempsource (col) VALUES('')
- 将数据转换成应该处理的数据格式
CREATE TABLE #temp(name NVARCHAR(50),colValue INT ) INSERT INTO #temp SELECT LEFT(col,6) AS name ,SUBSTRING(col,7,LEN(col)) FROM #tempsource
- 将数据进行排序分组
select v1.colValue, (v1.colValue - v1.rownum) as delta ,v1.name INTO #tempSort
from
(
select Row_Number() OVER (ORDER BY name,colValue) as rownum,colValue ,name
from #temp
) v1
- 找出连续的数字并分组
SELECT v2.name,delta,MIN(v2.colValue) as StartNum, max(v2.colValue) as EndNum,
max(v2.colValue)-min(v2.colValue)+1 as Count,ROW_NUMBER() OVER( ORDER BY v2.delta ASC ) AS rownum
INTO #tempContinuity
from #tempSort v2
--WHERE v2.colValue >=2
group by v2.name,v2.delta
ORDER BY StartNum
- 跟据连续的信息找出不连续的数字并分组
SELECT tlx1.name,tlx1.EndNum+1 LostStartNum,tlx2.StartNum-1 AS LostEndNum,tlx2.StartNum-1 -(tlx1.EndNum+1)+1 LostCount
INTO #tempLost
FROM #tempContinuity AS tlx1
LEFT JOIN #tempContinuity AS tlx2 ON tlx1.rownum+1 = tlx2.rownum AND tlx2.name = tlx1.name
WHERE tlx2.StartNum IS NOT NULL
ORDER BY tlx1.delta
- 将取得的信息进行组装成源格式进行显示
SELECT name +RIGHT(''+ CAST(StartNum AS NVARCHAR),5) AS StartNum ,name +RIGHT(''+ CAST(EndNum AS NVARCHAR),5) AS EndNum,Count FROM #tempContinuity
SELECT name +RIGHT(''+ CAST(LostStartNum AS NVARCHAR),5) AS LostStartNum ,name +RIGHT(''+ CAST(LostEndNum AS NVARCHAR),5) AS LostEndNum,LostCount FROM #tempLost
- 使用ForXml将其分组合并成一行
SELECT name,STUFF((SELECT name +RIGHT(''+ CAST(StartNum AS NVARCHAR),5) +'-'+name +RIGHT(''+ CAST(EndNum AS NVARCHAR),5)+'|'+CAST(t.Count AS NVARCHAR) +';' FROM #tempContinuity AS t WHERE t.name =v.name FOR XML PATH ('')),1,0,'') AS strCard
FROM #tempContinuity AS v
GROUP BY v.name
sql从某不连续的数字中将其分段并找出缺失的数字并分段的更多相关文章
- 一起来刷《剑指Offer》——不修改数组找出重复的数字(思路及Python实现)
数组中重复的数字 在上一篇博客中<剑指Offer>-- 题目一:找出数组中重复的数字(Python多种方法实现)中,其实能发现这类题目的关键就是一边遍历数组一边查满足条件的元素. 然后我们 ...
- 【Java】 剑指offer(2) 不修改数组找出重复的数字
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 在一个长度为n+1的数组里的所有数字都在1到n的范围内,所以数组中至少 ...
- 机器学习进阶-项目实战-信用卡数字识别 1.cv2.findContour(找出轮廓) 2.cv2.boudingRect(轮廓外接矩阵位置) 3.cv2.threshold(图片二值化操作) 4.cv2.MORPH_TOPHAT(礼帽运算突出线条) 5.cv2.MORPH_CLOSE(闭运算图片内部膨胀) 6. cv2.resize(改变图像大小) 7.cv2.putText(在图片上放上文本)
7. cv2.putText(img, text, loc, text_font, font_scale, color, linestick) # 参数说明:img表示输入图片,text表示需要填写的 ...
- 《剑指offer》第三_二题(不修改数组找出重复的数字)
// 面试题3(二):不修改数组找出重复的数字 // 题目:在一个长度为n+1的数组里的所有数字都在1到n的范围内,所以数组中至 // 少有一个数字是重复的.请找出数组中任意一个重复的数字,但不能修改 ...
- 【小米oj】找出单独的数字
题目链接:https://code.mi.com/problem/list/view?id=2&cid=0&sid=26251#codearea 描述 给出N个数字.其中仅有一个数字出 ...
- 【Offer】[3-2] 【不修改数组找出重复的数字】
题目描述 思路分析 Java代码 代码链接 题目描述 在一个长度为n+1的数组里的所有数字都在1~n的范围内,所以数组中至少有一个数字是重复的. 请找出数组中任意一个重复的数字,但不能修改输入的数组. ...
- 【剑指 Offer】03.1.不修改数组找出重复的数字
找出数组中重复的数字. 在一个长度为 n + 1 的数组 nums 里的所有数字都在 1-n 的范围内.所以数组中至少有一个是重复的.请找出数组中任意一个重复的数字. 示例 1: 输入: [2, 3, ...
- 算法-找出与目标数字相同的digit组成的整数中比该数字大的数集中的最小数字
题目: 给出1个正整数,找到用与这个数字相同的digit组成的整数中比这个数字大的数集中的最小数字.比如:12352874 的结果是 12354278 分析: 这道题目的考虑目标是数组的查找与排序. ...
- C#中的字符串处理——找出最长数字子串
百度测试部2015年10月份的面试题之——字符串处理,找出最长的子串. 代码如下: private static string SelectNumberFromString(string input) ...
随机推荐
- 【沙茶了+筛选保存最大质因数】【HDU2136】Largest prime factor
Largest prime factor Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- Java编程的23种设计模式
设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用. ...
- C的xml编程-libxml2(转)
这里主要讲述libxml2在linux下的使用. (以下内容除了linux下的安装步骤是自己写的,其余均出自http://www.blogjava.net/wxb_nudt/archive/2007/ ...
- Fedora下用Iptux,中文乱码解决
Ubuntu/Fedora下用Iptux与Windows下大飞鸽传书,中文乱码解决 问题描述: 在Ubuntu/Fedora下安装了Iptux后,再往Windows机器上发送文件或消息时,如果有中文, ...
- C++标准程序读书笔记-第三章错误和异常处理
1.命名空间(namespace)std C++标准程序库中的所有标示符都被定义于一个名为std的namespace 2.标准异常类别 (1)语言本身或标准程序库所抛出的所有异常,都派生自基类exce ...
- 日志管理-NLog日志框架简写用法
本文转载:http://www.blogjava.net/qiyadeng/archive/2013/02/27/395799.html 在.net中也有非常多的日志工具,今天介绍下NLog.NLog ...
- 使用HTML5的页面资源预加载(Link prefetch)功能加速你的页面加载速度
不管是浏览器的开发者还是普通web应用的开发者,他们都在做一个共同的努力:让Web浏览有更快的速度感觉.有很多已知的技术都可以让你的网站速度变得更快:使用CSS sprites,使用图片优化工具,使用 ...
- jQuery插件的点点滴滴
说起jQuery插件,很多人的脑海种已经有了一定的雏形,仿佛感觉仅仅就是那样子,事实呢?当你看了Bootstrap.js,品读了slidesjs,观摩了jquery.cycle2.js,不禁发现,原来 ...
- PHP实现简单爬虫
<?php /** * 爬虫程序 -- 原型 * * 从给定的url获取html内容 * * @param string $url * @return string */ func ...
- multiprocessing跨平台锁的使用(Windows问题)
在Windows上可能遇到,开启的子进程不会关闭的问题 参考multiprocessing官方文档: Explicitly pass resources to child processes On U ...