我有两个表(以及一个非聚集索引),可以使用以下命令创建:
CREATE TABLE GroupTable
(
GroupKey int NOT NULL PRIMARY KEY,
RecordCount int NOT NULL,
GroupScore float NOT NULL
);
CREATE TABLE RecordTable
(
RecordKey varchar(10) NOT NULL,
GroupKey int NOT NULL,
PRIMARY KEY(RecordKey, GroupKey)
);
CREATE UNIQUE INDEX ixGroupRecord ON RecordTable(GroupKey, RecordKey);
从技术上讲,我的表略有不同,并且我要加入其他一些表,但这是适合我的情况的代理。
- 我想选择所有
GroupKeys不是另一个子集的子集GroupKey。 - 对于给定的超集,我想获取其
GroupScore所有子集(包括自身)的最大值。 - 在a
GroupKey包含与RecordKeys另一个完全相同的情况下GroupKey(s),则仅GroupKeys会抓取其中一个(与哪个无关)。 - 任何
GroupKey具有完全相同的RecordKeys另一个GroupKey(s)也会有相同的GroupScore。 - 不相关的
GroupKeys也可以具有相同的分数。
下面是一个示例来说明我在问什么:
GroupTable RecordTable
GroupKey RecordCount GroupScore RecordKey GroupKey
------------------------------------ ---------------------
1 3 6.2 A 1
29 2 9.8 A 29
95 3 6.2 A 95
192 4 7.1 A 192
B 1
B 29
B 95
B 192
C 1
C 95
D 192
E 192
我希望输出如下:
GroupKey RecordCount GroupScore
-------------------------------------
1 3 9.8
192 4 9.8
GroupTable大约有7500万行,RecordTable大约有115M行;但是,在连接和WHERE谓词之后,给定的一天大约有2万行。
如果这个问题无关紧要,我深表歉意,但是出于某种原因,我真的很努力。