【发布时间】:2011-04-18 22:41:37
【问题描述】:
我一直在使用 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 的 2 个最长休息时间的总和,最好使用集合和临时表(而不是游标或嵌套子查询)。
这是在 SQL 中无法运行的梦想查询(无论我运行多少次):
Select HoursCTR, SUM ( TOP 2 Duration ) as LongestBreaks
FROM #Periods
WHERE Rest = 1
Group By HoursCTR
HoursCTR 可以有任意数量的休息期(包括没有)。
我目前的解决方案不是很优雅,基本上涉及以下步骤:
- 获取最长休息时间,按 HoursCTR 分组
- 选择返回每个 HoursCTR 的最大持续时间的第一个(最小)RestCTR 行
- 重复第 1 步(不包括第 2 步中已收集的行)
- 重复第 2 步(同样,排除第 2 步中收集的行)
- 将 RestCTR 行(来自第 2 步和第 4 步)合并到单个表中
- 获取第 5 步中的行所指向的持续时间的总和,按 HoursCTR 分组
如果有任何设置功能可以减少此过程,他们将非常受欢迎。
【问题讨论】:
标签: sql sql-server set sql-server-2000