J'ai deux tables (avec un index non cluster) qui peuvent être créées avec les commandes ci-dessous:
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);
Bien que techniquement mes tables soient légèrement différentes et que je me joigne à quelques autres tables, c'est un proxy approprié pour ma situation.
- Je voudrais sélectionner tous ceux
GroupKeys
qui ne sont pas des sous-ensembles d'un autreGroupKey
. - Pour un sur-ensemble donné, je voudrais saisir le maximum
GroupScore
de tous ses sous-ensembles (y compris lui-même). - Dans le cas où a
GroupKey
contient exactement la même choseRecordKeys
qu'un autreGroupKey(s)
, alors un seul d'entre euxGroupKeys
est saisi (peu importe lequel). - Tout ce
GroupKey
qui a le même exactRecordKeys
qu'un autreGroupKey(s)
aura également le mêmeGroupScore
. - Les personnes non apparentées
GroupKeys
peuvent également avoir le même score.
Voici un exemple pour illustrer ce que je demande:
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
J'aimerais que la sortie soit la suivante:
GroupKey RecordCount GroupScore
-------------------------------------
1 3 9.8
192 4 9.8
GroupTable
a environ 75 millions de lignes et RecordTable
environ 115 millions de lignes; cependant, après les jointures et le WHERE
prédicat, il y a généralement environ 20 000 lignes un jour donné.
Je m'excuse si cette question est banale, mais pour une raison quelconque, je suis vraiment en difficulté avec elle.
la source