Saya memiliki dua tabel (bersama dengan indeks nonclustered) yang dapat dibuat dengan perintah di bawah ini:
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);
Walaupun secara teknis tabel saya sedikit berbeda dan saya bergabung di beberapa tabel lain, ini adalah proksi yang cocok untuk situasi saya.
- Saya ingin memilih semua
GroupKeysyang bukan himpunan bagian dari yang lainGroupKey. - Untuk superset yang diberikan, saya ingin meraih maksimum
GroupScoresemua himpunan bagiannya (termasuk dirinya sendiri). - Dalam contoh ketika a
GroupKeyberisi persis samaRecordKeysdengan yang lainGroupKey(s), maka hanya satu dari yangGroupKeysdiambil (tidak masalah yang mana). - Apa pun
GroupKeyyang memiliki persis samaRecordKeysdengan yang lainGroupKey(s)juga akan memiliki yang samaGroupScore. - Tidak terkait
GroupKeysdapat memiliki skor yang sama juga.
Berikut ini adalah contoh untuk menggambarkan apa yang saya tanyakan:
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
Saya ingin hasilnya sebagai berikut:
GroupKey RecordCount GroupScore
-------------------------------------
1 3 9.8
192 4 9.8
GroupTablememiliki sekitar 75M baris, dan RecordTablememiliki sekitar 115M baris; Namun, setelah bergabung dan WHEREpredikat, cenderung ada sekitar 20 ribu baris pada hari tertentu.
Saya minta maaf jika pertanyaan ini sepele, tetapi untuk beberapa alasan saya benar-benar berjuang dengan itu.