Выбор суммы значений 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Если есть какие-либо установленные функции, которые сокращают этот процесс, они будут очень приветствоваться.