我有一张表,它只使用月份和日期定义了几个不重叠的日期期间。它基本上是一个库存项目的“库存”表,允许您为季节性业务在一年中库存不同数量的库存。下面是单个项目的库存表可能看起来如何的示例。请注意,我有一个未在此处显示的 Items 表。在下表中,ItemID 是外键,StockID 是主键。
StockID ItemID BeginDate EndDate QtyTrigger ReorderQty
1 1 11/1 1/31 0 1
2 1 2/1 5/31 1 2
3 1 6/1 10/31 1 1
因此,假设我想获得日期为 2013 年 1 月 15 日的重新排序查询/报告。按照我当前的逻辑,我的查询将错误地返回,因为它看起来像这样:
SELECT i.*, st.QtyTrigger, st.ReorderQty
FROM t20Itm AS i INNER JOIN t20Itm_Stock AS st ON i.ItemID = st.ItemID
WHERE #01/14/2013# >= CDate(st.BeginDate & "/2013" ) AND
#01/14/2013# <= CDate(st.EndDate & "/2013")
AND i.QtyOnHand <= st.QtyTrigger
问题是这个例子中 11/1 的 BeginDate 需要是 11/1/2012。在我的示例中,我展示的是 2013 年,因为这是我能够想出的用于生成此查询的唯一逻辑。
我怀疑我的问题可能是一个更大的设计缺陷,所以我正在寻找如何完成这个或更好的想法的答案,也许有一些原因说明这个设计是一个坏主意。
我知道我可以通过不允许跨越 12 月 31 日的日期跨度来实现这一点。但是,该应用程序的许多用户都有一个从 11 月到 2 月的时间段,这是他们最慢的月份。他们最终将创建两个不同的日期跨度,其中包含相同的数据,一个用于 11 月/12 月,另一个用于 1 月/2 月。
我将 SQL Server 用于数据库,将 MS Access 用于前端应用程序。我可以使用 T-SQL 或 Access VBA,因此您的解决方案可以是其中任何一个。