麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

巧妙利用PARTITION分組排名遞增特性解決合并連續(xù)相同數(shù)據(jù)行

2024-08-31 01:02:18
字體:
供稿:網(wǎng)友
這篇文章主要介紹了巧妙利用PARTITION分組排名遞增特性解決合并連續(xù)相同數(shù)據(jù)行,需要的朋友可以參考下
 
 

問題提出

先造一些測試數(shù)據(jù)以說明題目:

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

巧妙利用PARTITION分組排名遞增特性解決合并連續(xù)相同數(shù)據(jù)行

巧妙利用PARTITION分組排名遞增特性解決合并連續(xù)相同數(shù)據(jù)行

數(shù)據(jù)說明,ID列連續(xù)自增,列1和列2都是TFS中PBI的狀態(tài)記錄,就是從什么變更到什么,如新建到批準(zhǔn),批準(zhǔn)到提交神馬的

現(xiàn)在要求連續(xù)且相同的狀態(tài)變更記錄合并,不連續(xù)或者不同的狀態(tài)變更保留,例如:

以上圖為例,ID為1,4,5,6的記錄都是從New到Approved狀態(tài),但是記錄1與記錄4、5、6不相鄰,或者說不連續(xù),那么就要分成兩組,

記錄1一組,記錄4、5、6一組,其它記錄因?yàn)闋顟B(tài)變更不相同所以全部保留,最后的查詢結(jié)果應(yīng)該長成下圖這個(gè)樣子:

巧妙利用PARTITION分組排名遞增特性解決合并連續(xù)相同數(shù)據(jù)行

繼續(xù)之前你可以先自己試下,這可能會(huì)帶來新的解題思路,

解題思路

該問題的關(guān)鍵在于GROUP BY會(huì)把記錄1、4、5、6合并在一起,而這不符合要求,僅需要合并4、5、6,源表里沒有這樣一個(gè)字段可以將記錄1與記錄4、5、6區(qū)分開來,這是解題的關(guān)鍵

這里可以利用RANK函數(shù)配合使用PARTITION關(guān)鍵字,首先把1456分到一組去,同時(shí)產(chǎn)生一個(gè)組內(nèi)排名的新字段R,這個(gè)排名R很關(guān)鍵,后邊會(huì)用到,見下圖:

巧妙利用PARTITION分組排名遞增特性解決合并連續(xù)相同數(shù)據(jù)行

RANK函數(shù)不了解的點(diǎn)這里

RANK函數(shù)以Col1 + Col2為分組條件,這樣分成了四組,分別是New-Approved、Approved-Commited、Commited-In Progress、Approved-Removed

在New-Approved組內(nèi),記錄1、4、5、6分別排名1、2、3、4;其它組內(nèi)僅一條記錄,在其組內(nèi)排名均為1

現(xiàn)在制造了一個(gè)R字段,R字段標(biāo)識(shí)了每條記錄在其組內(nèi)的排名,排名自1開始遞增,

源表內(nèi)ID自增,組內(nèi)排名R遞增,這就是解題的關(guān)鍵,

當(dāng)連續(xù)相同的記錄出現(xiàn)時(shí),其ID與其排名R在同時(shí)遞增,則其差值是相同的,拿到這個(gè)差值就可以很容易解決題目了,看下圖:

巧妙利用PARTITION分組排名遞增特性解決合并連續(xù)相同數(shù)據(jù)行

記錄4、5、6相同且連續(xù)出現(xiàn),其ID與其排名在同時(shí)增長,其差值則保持不變,這里使用Col1 + Col2 + Gap作為分組條件即可將記錄4、5、6合并,再取個(gè)最小ID出來,問題解決,完整腳本如下:

巧妙利用PARTITION分組排名遞增特性解決合并連續(xù)相同數(shù)據(jù)行

可是如果ID不連續(xù)時(shí)怎么辦呢?這個(gè)不難,參考[MSSQL]ROW_NUMBER函數(shù)


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: www噜噜偷拍在线视频 | 日韩欧美综合在线 | 日本中文字幕电影在线观看 | 精品一区二区三区免费毛片 | chengrenzaixian| 天天碰天天操 | 亚洲小视频在线观看,com | sese综合| 在线中文字幕网站 | 亚洲3p激情在线观看 | av在线免费看网站 | 亚洲热线99精品视频 | 多男操一女视频 | 国产亚洲欧美日韩在线观看不卡 | 国产毛毛片一区二区三区四区 | 越南一级黄色片 | 国产成人在线一区二区 | 特级无码毛片免费视频尤物 | 成人性生活视频在线观看 | 国产精品视频导航 | 欧美激情首页 | 久久逼逼 | 亚洲九九爱 | 国产精品一区二区三区在线看 | 日韩视频在线一区二区三区 | 黄色成人av在线 | 国产男女 爽爽爽爽视频 | 日本在线不卡一区二区 | 久草在线播放视频 | 91美女视频在线 | 噜噜噜影院 | 国产三级在线视频观看 | 日韩精品中文字幕在线播放 | 日本aaaa片毛片免费观看视频 | 亚洲国产一区二区三区 | 91精品国产99久久久久久红楼 | 久久精品黄 | 亚洲成人高清在线观看 | 国产精品视频在线观看免费 | 中国fx性欧美xxxx | 久久精品视频日本 |