Ho due tabelle (insieme a un indice non cluster) che possono essere create con i comandi seguenti:
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);
Mentre tecnicamente i miei tavoli sono leggermente diversi e mi sto unendo ad alcuni altri tavoli, questo è un proxy adatto alla mia situazione.
- Vorrei selezionare tutto
GroupKeys
ciò che non è un sottoinsieme di un altroGroupKey
. - Per un determinato superset, vorrei prendere il massimo
GroupScore
di tutti i suoi sottoinsiemi (incluso se stesso). - Nel caso in cui a
GroupKey
contenga esattamente lo stessoRecordKeys
di un altroGroupKey(s)
, solo uno di questiGroupKeys
viene catturato (non importa quale). - Chiunque
GroupKey
abbia lo stesso identicoRecordKeys
a un altroGroupKey(s)
avrà anche lo stessoGroupScore
. - Anche i non correlati
GroupKeys
possono avere lo stesso punteggio.
Di seguito è riportato un esempio per illustrare ciò che sto chiedendo:
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
Vorrei che l'output fosse il seguente:
GroupKey RecordCount GroupScore
-------------------------------------
1 3 9.8
192 4 9.8
GroupTable
ha circa 75 milioni di righe e RecordTable
circa 115 milioni di righe; tuttavia, dopo i join e il WHERE
predicato, in un determinato giorno tende ad esserci circa 20k righe.
Mi scuso se questa domanda è banale, ma per qualche ragione sto davvero lottando con essa.