Tôi có hai bảng (cùng với một chỉ mục không bao gồm) có thể được tạo bằng các lệnh dưới đây:
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);
Mặc dù về mặt kỹ thuật, các bảng của tôi hơi khác nhau và tôi đang tham gia vào một vài bảng khác, đây là một proxy phù hợp cho tình huống của tôi.
- Tôi muốn chọn tất cả
GroupKeys
những gì không phải là tập con của người khácGroupKey
. - Đối với một superset nhất định, tôi muốn lấy tối đa
GroupScore
tất cả các tập con của nó (bao gồm cả chính nó). - Trong trường hợp khi một cái
GroupKey
chứa chính xácRecordKeys
như cái khácGroupKey(s)
, thì chỉ một cáiGroupKeys
được lấy (không quan trọng cái nào). - Bất kỳ
GroupKey
cái nào có cùng chính xácRecordKeys
như cái khácGroupKey(s)
cũng sẽ có cùngGroupScore
. - Không liên quan
GroupKeys
có thể có cùng số điểm là tốt.
Sau đây là một ví dụ để minh họa những gì tôi đang hỏi:
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
Tôi muốn đầu ra là như sau:
GroupKey RecordCount GroupScore
-------------------------------------
1 3 9.8
192 4 9.8
GroupTable
có khoảng 75M hàng và RecordTable
có khoảng 115M hàng; tuy nhiên, sau khi tham gia và WHERE
vị ngữ, có xu hướng có khoảng 20 nghìn hàng vào một ngày nhất định.
Tôi xin lỗi nếu câu hỏi này là tầm thường, nhưng vì một số lý do tôi thực sự vật lộn với nó.