Eu tenho duas tabelas (junto com um índice não clusterizado) que podem ser criadas com os comandos abaixo:
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);
Embora tecnicamente minhas tabelas sejam um pouco diferentes e eu esteja participando de algumas outras tabelas, esse é um proxy adequado para minha situação.
- Eu gostaria de selecionar todos os
GroupKeysque não são subconjuntos de outroGroupKey. - Para um determinado superconjunto, eu gostaria de obter o máximo
GroupScorede todos os seus subconjuntos (incluindo ele próprio). - No caso em que a
GroupKeycontém exatamente o mesmoRecordKeysque a outraGroupKey(s), apenas umaGroupKeysé capturada (não importa qual). - Qualquer um
GroupKeyque tenha exatamente o mesmoRecordKeysque outroGroupKey(s)também terá o mesmoGroupScore. - Os não relacionados também
GroupKeyspodem ter a mesma pontuação.
A seguir, é apresentado um exemplo para ilustrar o que estou perguntando:
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
Gostaria que a saída fosse a seguinte:
GroupKey RecordCount GroupScore
-------------------------------------
1 3 9.8
192 4 9.8
GroupTabletem cerca de 75 milhões de linhas e RecordTablecerca de 115 milhões de linhas; no entanto, após as junções e o WHEREpredicado, tende a haver cerca de 20 mil linhas em um determinado dia.
Peço desculpas se esta pergunta é trivial, mas por algum motivo estou realmente lutando com ela.