我第一次發帖。選擇範圍內的最大日期,排除其他多個日期範圍
我有一個棘手的任務,即查找範圍內的最新日期,但不包括多個其他日期範圍。我有代碼確實工作,但它似乎非常重要。我在MAX(日期)範圍內選擇。但是,我有一個表格,其中每個節目都有其自己的日期範圍(存儲爲DateStart和DateEnd)。所以我需要MAX(日期)範圍內的非在該日期顯示(可能有0到99顯示重疊我的日期範圍)。
注:我有dbo.fnSeqDates偉大的工程(通過谷歌找到),並返回一個範圍內的所有日期 - 使得在12年6月1日非常快充,12年6月2日,6/3 /12...6/30/12等
我在做什麼(下面)是創建一個表中的所有日期(範圍內),然後找到所有在該範圍內的顯示(# ShowIDs)並遍歷這些節目,一次一個,刪除所有這些日期(從#DateRange)。最終,#DateRange只剩下「空」日期。因此,剩餘在#DateRange中的MAX(日期)是我沒有演出的月份中的最後一個日期。
再次,我的代碼以下確實工作,但有一個更好的方法。思考?
謝謝 託德
CREATE procedure spLastEmptyDate @DateStart date , @DateEnd date as begin -- VARS... declare @ShowID int declare @EmptyDate date -- TEMP TABLE... create table #DateRange(dDate date) create table #ShowIDs(ShowID int) -- LOAD ALL DATES IN RANGE (THIS MONTH-ISH)... insert into #DateRange(dDate) select SeqDate from dbo.fnSeqDates(@DateStart, @DateEnd) -- LOAD ALL SHOW IDs IN RANGE (THIS MONTH-IS)... insert into #ShowIDs(ShowID) select s.ShowID from bfShow s where s.DateStart = @DateStart -- PRIME SHOW ID... set @ShowID = 0 select @ShowID = min(ShowID) from #ShowIDs -- RUN THRU ALL, REMOVING DATES AS WE GO... while (@ShowID > 0) begin -- REMOVE FROM TEMP... delete DR from #DateRange DR , bfShow s where DR.dDate between s.DateStart and s.DateEnd and s.ShowID = @ShowID -- DROP THAT ONE FROM TEMP... delete from #ShowIDs where ShowID = @ShowID -- GET NEXT ID... set @ShowID = 0 select @ShowID = min(ShowID) from #ShowIDs end -- GET LAST EMPTY SPOT... select @EmptyDate = max(dDate) from #DateRange -- CLEAN UP... drop table #DateRange drop table #ShowIDs -- RETURN DATA... select @EmptyDate as LastEmptyDateInRange end
我認爲這是SQL Server 2008或更高版本(給定'date'數據類型)?另外,看起來所有的節目都是在同一天開始的(因爲你選擇了's.DateStart = @ DateStart') - 那是正確的嗎?一些工作示例(S)也將有所幫助... –