初めての投稿。
範囲内の最新の日付を見つけるというトリッキーなタスクがありますが、他の複数の日付範囲を除外します。私は機能するコードを持っていますが、それはひどく負担がかかるようです。
範囲内のMAX(日付)を選択しています。ただし、テーブルbfShowがあり、各ショーには独自の日付範囲があります(DateStartおよびDateEndとして保存されます)。したがって、その日付にショーがない範囲内のMAX(日付)が必要です(0から99のショーが私の日付範囲と重複している可能性があります)。
注:私はdbo.fnSeqDatesを持っています。これは(Googleで見つかりました)うまく機能し、範囲内のすべての日付を返します-6/1 / 12、6 / 2 / 12、6 / 3/12...6で非常に高速に入力できます/30/12など
私が行っているのは(以下)、すべての日付(範囲内)を含むテーブルを作成し、その範囲内のすべてのショー(#ShowIDs)を見つけて、それらのショーを一度に1つずつ繰り返し、すべての日付を削除することです。 (#DateRangeから)。最終的に、#DateRangeには「空の」日付のみが残ります。したがって、#DateRangeに残っているMAX(Date)は、ショーがない月の最後の日付です。
繰り返しますが、以下の私のコードは機能しますが、より良い方法が必要です。考え?
ありがとう、トッド
CREATEプロシージャspLastEmptyDate @Date開始日 、@ DateEnd date なので 始める --VARS..。 @ShowIDintを宣言します @EmptyDate日付を宣言します --TEMP TABLE .. .. テーブルの作成#DateRange(dDate date) テーブルの作成#ShowIDs(ShowID int) -すべての日付を範囲内でロードします(今月のように)... #DateRange(dDate)に挿入 SeqDateを選択します dbo.fnSeqDates(@ DateStart、@ DateEnd)から -すべてのショーIDを範囲内にロードします(今月-IS).. #ShowIDs(ShowID)に挿入 s.ShowIDを選択します bfShowから ここで、s.DateStart = @DateStart --PRIME SHOW ID .. .. @ShowID=0に設定 @ShowID = min(ShowID)を選択します #ShowIDsから -すべてを実行し、日付を削除します... while(@ShowID> 0) 始める -臨時雇用者から削除... DRを削除する #DateRangeDRから 、bfShow s ここで、s.DateStartとs.DateEndの間のDR.dDate およびs.ShowID=@ShowID --TEMPからその1つをドロップします。 #ShowIDsから削除 ここで、ShowID = @ShowID -次のIDを取得... @ShowID=0に設定 @ShowID = min(ShowID)を選択します #ShowIDsから 終わり -最後の空のスポットを取得... @EmptyDate = max(dDate)を選択します #DateRangeから - 掃除... ドロップテーブル#DateRange ドロップテーブル#ShowIDs -データを返す..。 LastEmptyDateInRangeとして@EmptyDateを選択します 終わり