ฉันมีสองตาราง (พร้อมกับดัชนี nonclustered) ที่สามารถสร้างด้วยคำสั่งด้านล่าง:
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
มีแถวประมาณ 75M และRecordTable
มีแถวประมาณ 115M อย่างไรก็ตามหลังจากการรวมและการWHERE
สรุปมีแนวโน้มที่จะมีประมาณ 20k แถวในวันที่กำหนด
ฉันขอโทษถ้าคำถามนี้เล็กน้อย แต่ด้วยเหตุผลบางอย่างฉันจริงๆดิ้นรนกับมัน