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