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
GroupScore
aller ihrer Teilmengen (einschließlich sich selbst) erfassen. - In dem Fall, in dem a
GroupKey
genau dasselbe enthältRecordKeys
wie ein anderesGroupKey(s)
, wird nur einer davonGroupKeys
erfasst (es spielt keine Rolle, welcher). - Jeder
GroupKey
, der genau das gleicheRecordKeys
wie ein anderer hatGroupKey(s)
, hat auch das gleicheGroupScore
. - Nicht verwandte
GroupKeys
kö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
GroupTable
hat ungefähr 75 Millionen Zeilen und RecordTable
hat ungefähr 115 Millionen Zeilen; Nach den Verknüpfungen und dem WHERE
Prä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.
quelle