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 HoursCTRWenn es bestimmte Funktionen gibt, die diesen Vorgang einschränken, wären sie sehr willkommen.