我正在构建一个 SQL 查询,该查询可用于获取有效日期介于给定开始/结束日期时间之间的记录,并捕获有效日期永远有效,直到有另一条具有不同有效日期的记录。例如,我正在显示一个价格表,其中产品价格基于特定日期有效
ProductID EffectiveDate Price
Milk 01/01/2012 3
Milk 02/01/2012 2.85
Milk 03/01/2012 3.1
Milk 03/15/2012 3.4
Milk 04/01/2012 3.2
如果我的开始/结束日期时间是 03/01 和 03/31,那么我想要日期为 03/01 和 03/15 的记录,但如果我的开始/结束日期是 03/20 和 03/31,那么我只需要获取记录 03/15 我的查询有效,但是我正在尝试查看是否有一种非常有效的方法来获得所需的结果。
SELECT productid,
effectivedate,
price
FROM product p
WHERE ( p.effectivedate >= '03/20/2012'
AND c.effectivedate <= '03/31/2012' )
OR p.effectivedate = (SELECT TOP 1 pp.[effectivedate]
FROM product pp
WHERE pp.effectivedate <= '03/20/2012'
AND pp.productid = p.productid
ORDER BY pp.effectivedate DESC)
我希望改进的原因是表格可以变得更大,我只是在这里展示一个示例作为产品,但是最终表格有更多的列。
感谢您的任何建议。