Tengo dos tablas (junto con un índice no agrupado) que se pueden crear con los siguientes comandos:
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);
Aunque técnicamente mis tablas son ligeramente diferentes y me estoy uniendo a algunas otras tablas, este es un proxy adecuado para mi situación.
- Me gustaría seleccionar todos los
GroupKeys
que no son subconjuntos de otroGroupKey
. - Para un superconjunto dado, me gustaría obtener el máximo
GroupScore
de todos sus subconjuntos (incluido él mismo). - En el caso en que un
GroupKey
contiene exactamente lo mismoRecordKeys
que otroGroupKey(s)
, entonces solo uno de ellosGroupKeys
es agarrado (no importa cuál). - Cualquiera
GroupKey
que tenga exactamente lo mismoRecordKeys
que otroGroupKey(s)
también tendrá lo mismoGroupScore
. - No relacionado también
GroupKeys
puede tener el mismo puntaje.
El siguiente es un ejemplo para ilustrar lo que estoy preguntando:
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
Me gustaría que la salida sea la siguiente:
GroupKey RecordCount GroupScore
-------------------------------------
1 3 9.8
192 4 9.8
GroupTable
tiene alrededor de RecordTable
75 millones de filas y tiene alrededor de 115 millones de filas; sin embargo, después de las uniones y el WHERE
predicado, tiende a haber alrededor de 20k filas en un día determinado.
Pido disculpas si esta pregunta es trivial, pero por alguna razón realmente estoy luchando con ella.
fuente