我正在寻找 tsql 中的连续算法。我的数据设置如下。
IF OBJECT_ID('Tempdb..#Area_Version') IS NOT NULL
DROP TABLE #Area_Version
CREATE TABLE #Area_Version
(
AreaVersionId INT ,
AreaId VARCHAR(1) ,
VersionId VARCHAR(2) ,
PocketGroupId INT
)
INSERT INTO #Area_Version
( AreaVersionId, AreaId, VersionId, PocketGroupId )
VALUES ( 1, 'A', 'V5', 0 ),
( 2, 'B', 'V2', 0 ),
( 3, 'C', 'V2', 0 ),
( 4, 'D', 'V3', 0 ),
( 5, 'E', 'V2', 0 ),
( 6, 'F', 'V1', 0 ),
( 7, 'F', 'V4', 0 ),
( 8, 'G', 'V3', 0 );
结果:
AreaVersionId AreaId VersionId PocketGroupId
------------- ------ --------- -------------
1 A V5 0
2 B V2 0
3 C V2 0
4 D V3 0
5 E V2 0
6 F V1 0
7 F V4 0
8 G V3 0
(8 row(s) affected)
下面是数据的可视化表示。
AreaId V1 V2 V3 V4 V5
A x
B x
C x
D x
E x
F x x
G x
按 AreaId 排序,我正在寻找连续的组。由于 V2 跨越 B、C 和 E 区域,因此 D 中的 V2 和 V3 不能以一个连续的顺序排列。上面的数据集可以分为两组。(V5、V2、V1 和 V3、V4)或(V5、V3、V4 和 V2、V1)。我可以根据超出问题范围的数量列来决定哪个集合优先。
根据算法的结果集,我会更新PocketGroupId,这样我就可以根据PocketGroupId进行查询,我会知道它是一个连续的组。
期望的结果应该是这样的。
AreaVersionId AreaId VersionId PocketGroupId
------------- ------ --------- -------------
1 A V5 1
2 B V2 1
3 C V2 1
4 D V3 2
5 E V2 1
6 F V1 1
7 F V4 3
8 G V3 2
任何想法如何实现这一点。提前致谢。