Ich habe mit Sätzen in SQL Server 2000 zu spielen und haben die folgende Tabellenstruktur für einen meiner Temptabellen (#Periods):Auswahl SUM von TOP 2 Werte innerhalb einer Tabelle mit mehreren GROUP in SQL
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 Berechnung der Summe der 2 längsten Ruhezeiten für jede StundeCTR, vorzugsweise mit Sets und Tabellen (anstatt Cursor oder verschachtelte Unterabfragen).
Hier ist der Traum Abfrage, die einfach nicht in SQL arbeiten (egal wie oft ich es laufen):
Select HoursCTR, SUM (TOP 2 Duration) as LongestBreaks
FROM #Periods
WHERE Rest = 1
Group By HoursCTR
Die HoursCTR eine beliebige Anzahl von Ruhezeiten haben können (einschließlich keine).
Meine aktuelle Lösung ist nicht sehr elegant und umfasst im Wesentlichen die folgenden Schritte:
- die maximale Dauer des Restes holt Gruppe von HoursCTR
- Wählen Sie die erste (min) RestCTR Zeile, die diesen max Dauer zurückzugibt für jeden HoursCTR
- Wiederholen Sie Schritt 1 (mit Ausnahme der Zeilen bereits in Schritt 2 gesammelt)
- Wiederholen Sie Schritt 2 (auch hier ohne Zeilen in Schritt gesammelt 2)
- Kombinieren des RestCTR Zeilen (aus Schritt 2 und 4) in einzelne Tabelle
- Get Summe der Dauer bis 5 durch die Zeilen in Schritt darauf, gruppiert nach HoursCTR
Wenn es irgendwelche eingestellten Funktionen sind, die diesen Prozess nach unten geschnitten, sie wäre sehr willkommen.
Wie wählt es zwei _longest_ Pausen Was bin ich? – Arkadiy
OP angegeben SQL Server 2000. ROW_NUMBER() und CTE sind nicht verfügbar. – bobs
@bobs: Danke, das habe ich verpasst. Ich habe eine andere Lösung hinzugefügt. –