巧妙利用PARTITION分组排名递增特性解决合并连续相同数据行

问题提出

先造一些测试数据以说明题目:

DECLARE @TestData TABLE(ID INT,Col1 VARCHAR(20),Col2 VARCHAR(20)) INSERT INTO @TestData(ID,Col1,Col2) SELECT 1,'New','Approved' UNION ALL SELECT 2,'Approved','Commited' UNION ALL SELECT 3,'Commited','In Progress' UNION ALL SELECT 4,'New','Approved' UNION ALL SELECT 5,'New','Approved' UNION ALL SELECT 6,'New','Approved' UNION ALL SELECT 7,'Approved','Removed' SELECT * FROM @TestData

数据说明,ID列连续自增,列1和列2都是TFS中PBI的状态记录,就是从什么变更到什么,如新建到批准,批准到提交神马的

现在要求连续且相同的状态变更记录合并,不连续或者不同的状态变更保留,例如:

以上图为例,ID为1,4,5,6的记录都是从New到Approved状态,但是记录1与记录4、5、6不相邻,或者说不连续,那么就要分成两组,

记录1一组,记录4、5、6一组,其它记录因为状态变更不相同所以全部保留,最后的查询结果应该长成下图这个样子:

继续之前你可以先自己试下,这可能会带来新的解题思路,

解题思路

该问题的关键在于GROUP BY会把记录1、4、5、6合并在一起,而这不符合要求,仅需要合并4、5、6,源表里没有这样一个字段可以将记录1与记录4、5、6区分开来,这是解题的关键

这里可以利用RANK函数配合使用PARTITION关键字,首先把1456分到一组去,同时产生一个组内排名的新字段R,这个排名R很关键,后边会用到,见下图:

RANK函数不了解的点这里

RANK函数以Col1 + Col2为分组条件,这样分成了四组,分别是New-Approved、Approved-Commited、Commited-In Progress、Approved-Removed

在New-Approved组内,记录1、4、5、6分别排名1、2、3、4;其它组内仅一条记录,在其组内排名均为1

现在制造了一个R字段,R字段标识了每条记录在其组内的排名,排名自1开始递增,

源表内ID自增,组内排名R递增,这就是解题的关键,

当连续相同的记录出现时,其ID与其排名R在同时递增,则其差值是相同的,拿到这个差值就可以很容易解决题目了,看下图:

记录4、5、6相同且连续出现,其ID与其排名在同时增长,其差值则保持不变,这里使用Col1 + Col2 + Gap作为分组条件即可将记录4、5、6合并,再取个最小ID出来,问题解决,完整脚本如下:

可是如果ID不连续时怎么办呢?这个不难,参考[MSSQL]ROW_NUMBER函数

时间: 2024-10-27 05:52:05

巧妙利用PARTITION分组排名递增特性解决合并连续相同数据行的相关文章

ASP.NET利用webclient获取页面源代码的解决方

asp.net|client|web|解决|页面|源代码 页面中包括DataGrid时,利用webclient获取页面源代码的解决方    主要问题,利用webclent获取页面源代码时,当页面中含有datagrid,并且该控件使用了自带的分页功能时,正常的方法只能获取第一页面的数据,其它页面的数据取不到,以下是解决方法. 方法一: 主要思路是利用webclient,post数据到服务来取得数据,这里主要用了一个小工具可以分析页面的组成及运行过程,分析中发现当点击下一页时,会Post三个参数过去

SEO诊断浅谈企业站排名下降如何解决

A5站长网SEO诊断团队基本上每天都会遇到一些企业站长咨询:"网站排名下降,不稳定要怎么办?"诸如此类的问题,相信这也会是很多的SEO人员想要知道的,对于企业站来说网站排名下降是常见的,但要如何解决,怎么才能稳定排名呢?下面A5站长网SEO诊断团队(http://seo.admin5.com/seozhenduan/ )和大家简单的谈下企业网站排名下降怎么解决? 内容每天更新 优质原创 内容为王相信这是网站永恒的话题,企业站想要排名稳定,不下降,这更是重重之重.搜索引擎喜欢原创新鲜的内

在应用层通过spring特性解决数据库读写分离

在应用层通过spring特性解决数据库读写分离    如何配置mysql数据库的主从? 单机配置mysql主从:http://my.oschina.net/god/blog/496   常见的解决数据库读写分离有两种方案 1.应用层 http://neoremind.net/2011/06/spring实现数据库读写分离 目前的一些解决方案需要在程序中手动指定数据源,比较麻烦,后边我会通过AOP思想来解决这个问题.   2.中间件 mysql-proxy:http://hi.baidu.com/

网站推广之擦边球篇 巧妙利用可信网站嫁接流量

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 最近在QQ群中经常看到类似这样的信息:请问这是个什么网站?真的有天上掉馅饼的事情吗?求解.http://big5.gov.cn/gate/big5/www.hzrcs.com/ 利用中国政府网(繁体版)的跳转功能进行网上欺诈性宣传.不知情的朋友还以为是中国政府官方的网站,点开链接才发现,居然跳转到www.hzrcs.com.由此我浅谈一下如何

《淘宝网开店 拍摄 修图 设计 装修 实战150招》一一2.6 巧妙利用前景、背景和留白

2.6 巧妙利用前景.背景和留白 给人留下深刻印象的照片的共同点是什么呢?就是画面中包含了背景和适当的空白.如果合理配置背景和留白的话,不仅可以保持画面的均衡感,同时也可以很好地表现出距离感.画面中的辅助物起着辅助.衬托被摄主体的作用.有了它们,可以拍出更具真实感和立体感的照片. 1.细心选择背景背景对于画面的造型具有十分重要的意义,所以处理好背景部分对于整个画面有十分重要的意义,不仅能起到突出主体的作用,还能起到丰富主体的内涵的作用.对于初学商品拍摄的人来说,尤其应该注意背景的选择.图2-10

利用seo做排名是一件很奢侈的事情

摘要: 前几天看到人们在微博讨论说,现在的利用seo做排名是一件很奢侈的事情,做不了排名的.在站长网也可以看到一些文章说seo现在没有效果了,劝很多人放弃SEO而做其他的推广营销方式 前几天看到人们在微博讨论说,现在的利用seo做排名是一件很奢侈的事情,做不了排名的.在站长网也可以看到一些文章说seo现在没有效果了,劝很多人放弃SEO而做其他的推广营销方式,但是seo真的没有效果吗,排名真的无法做上去吗,这里焦大可以给大家看个小小的案例. 这个网站是我们学员才做的站,域名才买3个月,在今年1月份

莫湘兆:巧妙利用语音YY营销推广

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 闲暇的下午,听着节奏缓和的呼吸声音,想起前几天在YY语音频道上的一个课程,听三个小时的课程,除了收获课程所教的内容外,更从我们的站长方向方面得到了一些经验,今天分享下,希望我们的站长朋友能够从中学习到一些方法,看看莫湘兆如何分析利用团队语音工具YY营销推广. 第一:选择合适的频道,抓住核心用户 昨天笔者在一个YY语音频道上课,该课程是莫湘兆的

oracle-Oracle里我记得有一个函数的功能是分组后可以显示组里的其他数据,不单单显示组名

问题描述 Oracle里我记得有一个函数的功能是分组后可以显示组里的其他数据,不单单显示组名 我根据名字分组后 (SELECT NAME FROM EMP GROUP BY NAME),显示A B C,但是我还想显示A,B,C下面的id 解决方案 wm_concat 函数 解决方案二: 你说的是group by吧??? 解决方案三: 你可以在group by 分组后,使用函数为max(),min()等显示非分组的字段 解决方案四: 分析函数,例如 select ename,deptno,sum(

SharePoint使用自定义字段作为分组的栏。当选择视图的默认样式时,不显示数据行;选择视图的其他样式时,可以显示数据行?这是怎么回事

问题描述 SharePoint使用自定义字段作为分组的栏.当选择视图的默认样式时,不显示数据行:选择视图的其他样式时,可以显示数据行?这是怎么回事,怎么解决???测试了几个自定义字段,效果都一样.其中一个可以参考霖雨写的博客:http://www.cnblogs.com/jianyus/p/3462626.html使用环境:SharePoint2013急!!求救,谢谢大家!! 解决方案 解决方案二:你最好截一下图,看不太懂解决方案三:引用1楼linyustar的回复: 你最好截一下图,看不太懂