我有一组类似的时期
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))
有没有办法做得更好,或者针对大量数据更好地优化代码?