He estado jugando con juegos en SQL Server 2000 y tienen la siguiente estructura de la tabla para una de mis tablas temporales (#Periods):Selección SUM del TOP 2 valores dentro de una tabla con GRUPO múltiple en SQL
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 utilizando conjuntos y tablas temporales (en lugar de cursores o subconsultas anidadas).
Aquí está la consulta sueño que no va a funcionar en SQL (no importa cuántas veces lo ejecuto):
Select HoursCTR, SUM (TOP 2 Duration) as LongestBreaks
FROM #Periods
WHERE Rest = 1
Group By HoursCTR
El HoursCTR puede tener cualquier número de períodos de descanso (incluyendo ninguno).
Mi solución actual no es muy elegante y básicamente implica los pasos siguientes:
- Obtener la duración máxima de descanso, el grupo de HoursCTR
- Seleccione la primera (min) RestCTR fila que devuelve esta duración máxima para cada HoursCTR
- Repita el paso 1 (con exclusión de las filas ya recopilados en el paso 2)
- Repite el paso 2 (de nuevo, con exclusión de filas recogidos en el paso 2)
- Combinar el RestCTR filas (de la etapa 2 y 4) en una sola mesa
- Get suma de la duración apuntado por las filas en el paso 5, agrupados por HoursCTR
Si hay algún funciones establecidas que cortan este proceso hacia abajo, se sería muy bienvenido
¿Cómo seleccionar dos descansos _longest_ ¿Qué me falta? – Arkadiy
OP indicado SQL Server 2000. ROW_NUMBER() y CTE no están disponibles. – bobs
@bobs: Gracias, me lo perdí. He agregado una solución diferente. –