मेरे पास दो टेबल हैं (एक गैर-अनुक्रमित सूचकांक के साथ) जो नीचे दिए गए आदेशों के साथ बनाई जा सकती हैं:
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इसके सभी सबसेट (स्वयं सहित) को अधिकतम हथियाना चाहूंगा । - उदाहरण में जब किसी अन्य
GroupKeyके समान सटीक होता है , तो उनमें से केवल एक को पकड़ा जाता है (यह कोई फर्क नहीं पड़ता कि कौन सा)।RecordKeysGroupKey(s)GroupKeys - किसी भी दूसरे
GroupKeyके समान ही सटीक भी होगा ।RecordKeysGroupKey(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
GroupTableRecordTableलगभग 75M पंक्तियाँ हैं , और लगभग 115M पंक्तियाँ हैं; हालाँकि, जुड़ने और WHEREभविष्यवाणी करने के बाद , एक निश्चित दिन में लगभग 20k पंक्तियाँ हो जाती हैं।
अगर यह सवाल तुच्छ है, तो मैं माफी चाहता हूं, लेकिन किसी कारण से मैं वास्तव में इसके साथ संघर्ष कर रहा हूं।