【发布时间】:2011-05-11 12:42:27
【问题描述】:
创建并加载了两个临时表...这是架构。
Create table #SH ([date] datetime,
sched_id int,
agent_id int)
Create table #SD (sched_id int,
start_minute int,
length int,
exception_code int)
(不幸的是,架构和设计是我无法更改的,两个临时表都是从平面文件中加载的。如果需要,我可以引入和加载新的临时表)。
一点背景 - #SH 标题表将人员日程表保存为“Start_minute”,并以分钟为单位显示“schedule_length”。例如,如果开始分钟和计划长度均为 480,则将读取为上午 8 点(上午 8 点 = 第 480 分钟)并持续到下午 4 点(480 分钟后,下午 4 点 = 第 960 分钟)
#SD 表包含标题的异常。在上面的示例中,此人可能会有一个午餐例外,即 start_minute = 720 和 30 的长度(12:00 - 12:30)。
日期和 agent_id 是我对#SH 唯一感兴趣的,#sd 中的异常信息是我感兴趣的。
此查询有效:
Select [date],#sd.start_minute,#sd.length,#sd.start_minute + #sd.length as 'end_minute',agent_id
from #SH
inner join #SD on #SD.sched_id = #sh.sched_id
*end_minute 最终是 start+length = end 的计算值
这会返回类似:
Date Start length end
1 2010-11-11 600 30 630
2 2010-11-11 630 40 670
3 2010-11-11 750 15 765
4 2010-11-11 800 40 840
现在我希望我可以说这已经结束并走开......但是存在数据输入问题。在第 1 行和第 2 行中,第 1 行的结束时间与第 2 行的开始时间一致,应该合并,所以我的结果如下所示:
Date Start length end
1 2010-11-11 600 70 670
2 2010-11-11 750 15 765
3 2010-11-11 800 40 840
关于如何构建此逻辑以便我得到 3 行而不是 4 行的任何想法?我正在努力在#sd1.start + #sd1.length = #sd2.start 上将表格加入到自身中。
更复杂的是...上面的示例是需要合并的 2 行。我遇到了一个连续有 30 个 1 分钟条目的记录,我需要将其制成一个记录。幸运的是它们不能重叠(你不会有 2 条记录占用相同的分钟数),但我认为我上面考虑的 join 语句不适用于此。
【问题讨论】:
-
对我自己的语法做了一些修改...#SH 中还有很多列,但它们无关紧要。
标签: sql sql-server tsql sql-server-2000