我有两个表(以及一个非聚集索引),可以使用以下命令创建:
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万行。
如果这个问题无关紧要,我深表歉意,但是出于某种原因,我真的很努力。