Я играл с сетами в 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 ...
Я бы хотел вычислить сумму двух самых длительных периодов отдыха для каждого HoursCTR, предпочтительно используя наборы и временную таблицы (а не курсоры или вложенные подзапросы).
Вот запрос мечты, который просто не будет работать в SQL (независимо от того, сколько раз я его запускал):
Select HoursCTR, SUM ( TOP 2 Duration ) as LongestBreaks
FROM #Periods
WHERE Rest = 1
Group By HoursCTR
HoursCTR может иметь любое количество периодов отдыха ( в том числе нет).
Мое текущее решение не очень элегантно и в основном включает следующие шаги:
Если есть какие-либо заданные функции, которые сокращают этот процесс, они будут очень приветствоваться.