Ich habe zwei Tabellen (zusammen mit einem nicht gruppierten Index), die mit den folgenden Befehlen erstellt werden können:
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);
Obwohl meine Tabellen technisch etwas anders sind und ich mich einigen anderen Tabellen anschließe, ist dies ein geeigneter Proxy für meine Situation.
- Ich möchte alle auswählen
GroupKeys, die keine Teilmengen einer anderen sindGroupKey. - Für eine bestimmte Obermenge möchte ich das Maximum
GroupScorealler ihrer Teilmengen (einschließlich sich selbst) erfassen. - In dem Fall, in dem a
GroupKeygenau dasselbe enthältRecordKeyswie ein anderesGroupKey(s), wird nur einer davonGroupKeyserfasst (es spielt keine Rolle, welcher). - Jeder
GroupKey, der genau das gleicheRecordKeyswie ein anderer hatGroupKey(s), hat auch das gleicheGroupScore. - Nicht verwandte
GroupKeyskönnen auch die gleiche Punktzahl haben.
Das Folgende ist ein Beispiel, um zu veranschaulichen, was ich frage:
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
Ich möchte, dass die Ausgabe wie folgt lautet:
GroupKey RecordCount GroupScore
-------------------------------------
1 3 9.8
192 4 9.8
GroupTablehat ungefähr 75 Millionen Zeilen und RecordTablehat ungefähr 115 Millionen Zeilen; Nach den Verknüpfungen und dem WHEREPrädikat gibt es jedoch an einem bestimmten Tag in der Regel etwa 20.000 Zeilen.
Ich entschuldige mich, wenn diese Frage trivial ist, aber aus irgendeinem Grund habe ich wirklich Probleme damit.