私は次のような生理のセットを持っています
PERIODID PERIODSTART PERIODEND PRICE STARTDOW
1 2012-12-01 2012-12-10 10 6
2 2012-12-11 2012-12-20 20 -1
3 2012-12-21 2012-12-30 30 -1
つまり、期間1の予約は土曜日に開始する必要がありますが、期間2と3の予約は開始しないでください。
2012年12月10日から2012年12月15日までの予約がある場合>-日数の期間をフィルタリングします(問題ありません)-土曜日に予約が開始されるかどうかを確認します。フィルタは一番上(または最初の行)のみに適用する必要がありますが、その方法がわかりません。予約が土曜日に開始されない場合、どの行も返されません。
私は試した
select * from periods p
where
((@ReservationStart between p.periodstart and p.periodend)
or
(@ReservationEnd between p.periodstart and p.periodend))
and ((select top 1 datepart(weekday, startdow) from periods where p.hotelID = period.hotelID order by period.periodstart) in (@datepart(weekday, @ReservationStart), -1))
それをより良くする方法、または大量のデータに対してコードをより良く最適化する方法はありますか?