我第一次发帖。
我有一项棘手的任务是在一个范围内查找最新日期,但不包括多个其他日期范围。我有可以工作的代码,但它似乎非常费力。
我在一个范围内选择MAX(Date) 。但是,我有一个表bfShow,其中每个节目都有自己的日期范围(存储为DateStart和DateEnd)。所以我需要在那个日期没有节目的范围内的MAX ( Date)(可能有 0 到 99 个节目与我的日期范围重叠)。
注意:我有dbo.fnSeqDates效果很好(通过 Google 找到)并返回一个范围内的所有日期 - 可以非常快速地填写 6/1/12、6/2/12、6/3/12...6 /30/12 等
我正在做的(如下)是创建一个包含所有日期(范围内)的表格,然后找到该范围内的所有节目(#ShowIDs)并遍历这些节目,一次一个,删除所有这些日期(来自#DateRange)。最终,#DateRange 只剩下“空”日期。因此,#DateRange 中剩余的 MAX(Date) 是我本月最后一个没有演出的日期。
同样,我下面的代码确实有效,但必须有更好的方法。想法?
谢谢你,托德
创建过程 spLastEmptyDate @DateStart 日期 , @DateEnd 日期 作为 开始 -- 变量... 声明@ShowID int 声明@EmptyDate 日期 -- 临时表... 创建表 #DateRange(dDate 日期) 创建表 #ShowIDs(ShowID int) -- 加载范围内的所有日期(本月-ISH)... 插入#DateRange(dDate) 选择 SeqDate 来自 dbo.fnSeqDates(@DateStart, @DateEnd) -- 加载范围内的所有节目 ID(本月)... 插入#ShowIDs(ShowID) 选择 s.ShowID 来自 bfShow 的 其中 s.DateStart = @DateStart -- PRIME SHOW ID... 设置@ShowID = 0 选择@ShowID = min(ShowID) 来自#ShowIDs -- 全部运行,删除日期... 而(@ShowID > 0) 开始 -- 从温度中移除... 删除 DR 来自#DateRange DR , bfShow s 其中 s.DateStart 和 s.DateEnd 之间的 DR.dDate 和 s.ShowID = @ShowID -- 从 TEMP 中删除那个... 从#ShowIDs 中删除 其中 ShowID = @ShowID -- 获取下一个 ID... 设置@ShowID = 0 选择@ShowID = min(ShowID) 来自#ShowIDs 结尾 -- 获取最后一个空位... 选择@EmptyDate = max(dDate) 来自#DateRange - 清理... 删除表#DateRange 删除表 #ShowIDs -- 返回数据... 选择 @EmptyDate 作为 LastEmptyDateInRange 结尾