Выбор суммы значений TOP 2 в таблице с несколькими GROUP в SQL

Я играл с наборами в SQL Server 2000 и имею следующую структуру таблицы для одной из моих временных таблиц (#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
    ...

Я хотел бы рассчитать сумму 2-х самых длинных периодов отдыха для каждого HoursCTR, предпочтительно используя наборы и временные таблицы (а не курсоры или вложенные подзапросы).

Вот запрос мечты, который просто не будет работать в SQL (независимо от того, сколько раз я его запускаю):

Select HoursCTR, SUM ( TOP 2 Duration ) as LongestBreaks
FROM #Periods
WHERE Rest = 1
Group By HoursCTR    

HoursCTR может иметь любое количество периодов отдыха (в том числе ни одного).

Мое текущее решение не очень элегантно и в основном включает в себя следующие шаги:

Получить максимальную продолжительность отдыха, группа по HoursCTRВыберите первую (минимальную) строку RestCTR, которая возвращает эту максимальную продолжительность для каждого HoursCTRПовторите шаг 1 (за исключением строк, уже собранных на шаге 2)Повторите шаг 2 (снова, за исключением строк, собранных на шаге 2)Объедините строки RestCTR (из шагов 2 и 4) в одну таблицуПолучите СУММУ Длительности, на которую указывают строки в шаге 5, сгруппированные по HoursCTR

Если есть какие-либо установленные функции, которые сокращают этот процесс, они будут очень приветствоваться.

Ответы на вопрос(3)

Ваш ответ на вопрос