У меня есть две таблицы (вместе с некластеризованным индексом), которые можно создать с помощью следующих команд:
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
имеет около 75 миллионов строк и RecordTable
около 115 миллионов строк; однако после объединений и WHERE
предикатов в определенный день может быть около 20 тыс. строк.
Я извиняюсь, если этот вопрос тривиален, но по некоторым причинам я действительно борюсь с этим.
источник