Auswahl der SUMME der TOP 2-Werte in einer Tabelle mit mehreren GROUP in SQL

Ich habe mit Sätzen in SQL Server 2000 gespielt und für eine meiner temporären Tabellen (#Periods) die folgende Tabellenstruktur verwendet:

    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
    ...

Was ich tun möchte, ist die Summe der 2 längsten Ruheperioden für jede HoursCTR zu berechnen, vorzugsweise unter Verwendung von Mengen und temporären Tabellen (anstelle von Cursorn oder verschachtelten Unterabfragen).

Hier ist die Traumabfrage, die in SQL einfach nicht funktioniert (egal wie oft ich sie ausführe):

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

The HoursCTR kann eine beliebige Anzahl von Ruheperioden haben (einschließlich keiner).

Meine aktuelle Lösung ist nicht sehr elegant und umfasst im Wesentlichen die folgenden Schritte:

Holen Sie sich die maximale Ruhezeit, gruppiert nach HoursCTRWählen Sie die erste (min) RestCTR-Zeile aus, die diese maximale Dauer für jede HoursCTR @ zurückgibWiederholen Sie Schritt 1 (mit Ausnahme der in Schritt 2 bereits gesammelten Zeilen).Wiederholen Sie Schritt 2 (erneut mit Ausnahme der in Schritt 2 erfassten Zeilen).Kombinieren Sie die RestCTR-Zeilen (aus Schritt 2 und 4) in einer einzelnen TabelleGet SUM der Dauer, auf die die Zeilen in Schritt 5 zeigen, gruppiert nach HoursCTR

Wenn es bestimmte Funktionen gibt, die diesen Vorgang einschränken, wären sie sehr willkommen.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage