Mam dwie tabele (wraz z indeksem nieklastrowanym), które można utworzyć za pomocą poniższych poleceń:
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);
Chociaż technicznie moje tabele są nieco inne i dołączam do kilku innych tabel, jest to odpowiedni serwer proxy dla mojej sytuacji.
- Chciałbym wybrać wszystkie
GroupKeys
, które nie są podzbiorami innegoGroupKey
. - Dla danego supersetu chciałbym pobrać maksimum
GroupScore
wszystkich jego podzbiorów (w tym siebie). - W przypadku, gdy a
GroupKey
zawiera dokładnie to samoRecordKeys
co inneGroupKey(s)
, wówczasGroupKeys
pobierany jest tylko jeden z nich (nie ma znaczenia, który z nich). - Każdy,
GroupKey
który ma taki sam dokładnyRecordKeys
jak inny,GroupKey(s)
będzie miał również to samoGroupScore
. - Niepowiązane
GroupKeys
mogą mieć również ten sam wynik.
Oto przykład ilustrujący to, o co proszę:
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
Chciałbym, aby wynik był następujący:
GroupKey RecordCount GroupScore
-------------------------------------
1 3 9.8
192 4 9.8
GroupTable
ma około 75 RecordTable
milionów wierszy i około 115 milionów wierszy; jednak po sprzężeniach i WHERE
predykacie w danym dniu jest zwykle około 20 000 wierszy.
Przepraszam, jeśli to pytanie jest trywialne, ale z jakiegoś powodu naprawdę mam z tym problem.
źródło