表格包含PriceValidFrom,PriceValidTo,BookingWindowFrom和BookingWindowTo日期字段和Price货币字段。客户端随机插入或更新行。例如,某些行的PriceValid周期可能比其他行短,但可能在同一个月内(并且价格不同)。其他行可能具有相同的PriceValid周期,但仅可能在BookingWindow期间有所不同。桌子从不清理,一切都可以接受。 我需要一个查询,给定日期,将返回具有最高PriceValidFrom日期的行中的价格。在下面的例子中,考虑到表和查询语句:使用两个不同日期选择最上一行
PriceValidFrom PriceValidTo Price
05/01/2013 05/30/2013 $100.00
05/15/2013 05/20/2013 $50.00
伪SQL
select top 1 price
where :Date between PriceValidFrom and PriceValidTo
order by PriceValidFrom DESC, Price
如果日期是2013年5月16日该查询返回$ 50.00预期。
现在,用户需要添加一个预订窗口时期,还必须采取最高BookingWindowFrom:
PriceValidFrom PriceValidTo Price BookingWindowFrom BookingWindowTo
05/01/2013 05/30/2013 $100.00 4/1/2013 5/30/2013
05/15/2013 05/20/2013 $50.00 4/1/2013 5/30/2013
05/15/2013 05/20/2013 $75.00 5/1/2013 5/30/2013
现在,如果日期是2013年5月16日和预约日期为5/1/2013查询需要返回$ 75.00
如何完成预期的结果?请注意,这是一个简化的例子,但实际表格中会有数百行。
select top 1 price
where :Date between PriceValidFrom and PriceValidTo
and :BookingDate between BookingWindowFrom and BookingWindowTo
什么有效日期ovverides?有效? – 2013-05-01 14:58:34
有些描述或示例数据显示当有效日期存在和不存在时要执行的操作会有所帮助。 – 2013-05-01 15:00:45
我已更新我的帖子。请再看看它。谢谢 – 2013-05-01 23:14:49