Auswählen SUMME der TOP 2 Werte in einer Tabelle mit mehreren GRUPPE in SQL

Spiele ich schon mit sets in SQL Server 2000 und habe folgende Tabellenstruktur für eine meiner temporären Tabellen (#Perioden):

 RestCTR HoursCTR Dauer 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 gerne machen würde, ist die Berechnung der Summe der 2 längsten Ruhezeiten für jeden HoursCTR, vorzugsweise mit sets, und temporäre Tabellen (eher als Cursor, oder verschachtelte Unterabfragen).

Hier ist das Traum-Abfrage, die einfach nicht funktioniert in SQL (egal wie oft ich es laufen):

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

Den HoursCTR kann eine beliebige Anzahl von Ruhezeiten (einschließlich keine).

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

  1. Man die max Dauer der rest, Gruppe, durch HoursCTR
  2. Wählen Sie den ersten (min) RestCTR Zeile zurückgibt, die diese max Dauer für jede HoursCTR
  3. Wiederholen Sie Schritt 1 (ohne die Zeilen, die bereits gesammelt in Schritt 2)
  4. Wiederholen Sie Schritt 2, (wieder, ohne Zeilen gesammelt in Schritt 2)
  5. Kombinieren die RestCTR Zeilen (Schritt 2 und 4) in eine einzige Tabelle
  6. Bekommen SUMME der Dauer wies auf die durch die Zeilen in Schritt 5, gruppiert nach HoursCTR

Wenn es irgendwelche set-Funktionen, schneiden Sie diesen Prozess verlangsamen, dann wären Sie sehr willkommen.

InformationsquelleAutor alex.zambila | 2010-09-29
Schreibe einen Kommentar