Selección de SUMA de los valores TOP 2 dentro de una tabla con GROUP múltiple en SQL
He estado jugando con conjuntos en SQL Server 2000 y tengo la siguiente estructura de tabla para una de mis tablas temporales (#Periods):
RestCTR HoursCTR Duration Rest ---------------------------------------- 1 337 2 0 2 337 46 1 3 337 2 0 4 337 46 1 5 338 1 0 6 338 46 1 7 338 2 0 8 338 46 1 9 338 1 0 10 339 46 1 ...
Lo que me gustaría hacer es calcular la suma de los 2 períodos de descanso más largos para cada HoursCTR, preferiblemente usando conjuntos y tablas temporales (en lugar de cursores o subconsultas anidadas).
Aquí está la consulta ideal que simplemente no funcionará en SQL (no importa cuántas veces lo ejecute):
Select HoursCTR, SUM ( TOP 2 Duration ) as LongestBreaks
FROM #Periods
WHERE Rest = 1
Group By HoursCTR
El HoursCTR puede tener cualquier cantidad de períodos de descanso (incluido ninguno).
Mi solución actual no es muy elegante y básicamente implica los siguientes pasos:
Obtenga la duración máxima de descanso, agrupe por Horas CTRSeleccione la primera fila (mínima) RestCTR que devuelve esta duración máxima para cada HoursCTRRepita el paso 1 (excluyendo las filas ya recopiladas en el paso 2)Repita el paso 2 (nuevamente, excluyendo las filas recopiladas en el paso 2)Combine las filas RestCTR (de los pasos 2 y 4) en una sola tablaObtenga la SUMA de la duración señalada por las filas en el paso 5, agrupada por HoursCTRSi hay funciones establecidas que reducen este proceso, serían muy bienvenidas.