У мене є дві таблиці (разом з некластеризованим індексом), які можна створити за допомогою наведених нижче команд:
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 тис. рядків.
Прошу вибачення, якщо це питання є тривіальним, але я чомусь справді борюся з цим.