Selecionando SOMA dos valores TOP 2 em uma tabela com vários GROUP no SQL
Joguei com conjuntos no SQL Server 2000 e tenho a seguinte estrutura de tabela para uma das minhas tabelas temporárias (#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 ...
O que eu gostaria de fazer é calcular a soma dos 2 períodos de descanso mais longos para cada HoursCTR, de preferência usando conjuntos e tabelas temporárias (em vez de cursores ou subconsultas aninhadas).
Aqui está a consulta dos sonhos que simplesmente não funciona no SQL (não importa quantas vezes eu a execute):
Select HoursCTR, SUM ( TOP 2 Duration ) as LongestBreaks
FROM #Periods
WHERE Rest = 1
Group By HoursCTR
O HoursCTR pode ter qualquer número de períodos de descanso (incluindo nenhum).
Minha solução atual não é muito elegante e envolve basicamente as seguintes etapas:
Obtenha a duração máxima do descanso, agrupe por HoursCTRSelecione a primeira linha (min) RestCTR que retorna essa duração máxima para cada HoursCTRRepita a etapa 1 (excluindo as linhas já coletadas na etapa 2)Repita a etapa 2 (novamente, excluindo as linhas coletadas na etapa 2)Combine as linhas RestCTR (das etapas 2 e 4) em uma única tabelaObter SOMA da Duração apontada pelas linhas na etapa 5, agrupadas por HoursCTRSe houver funções definidas que reduzam esse processo, elas serão muito bem-vindas.