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
GroupKeys
yang bukan himpunan bagian dari yang lainGroupKey
. - Untuk superset yang diberikan, saya ingin meraih maksimum
GroupScore
semua himpunan bagiannya (termasuk dirinya sendiri). - Dalam contoh ketika a
GroupKey
berisi persis samaRecordKeys
dengan yang lainGroupKey(s)
, maka hanya satu dari yangGroupKeys
diambil (tidak masalah yang mana). - Apa pun
GroupKey
yang memiliki persis samaRecordKeys
dengan yang lainGroupKey(s)
juga akan memiliki yang samaGroupScore
. - Tidak terkait
GroupKeys
dapat 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
GroupTable
memiliki sekitar 75M baris, dan RecordTable
memiliki sekitar 115M baris; Namun, setelah bergabung dan WHERE
predikat, 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.
sumber