我有一张表格,它定义了仅使用月和日的几个非重叠日期。它基本上是库存物品的“库存”表格,允许您在季节性业务中存储一年中的不同金额。以下是一个单个项目库存表的外观示例。请注意,我有一个项目表,我没有在这里显示。在此表中,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需要是2012年11月1日。在我的示例中,我展示了2013年,因为这是我能够用来生成此查询的唯一逻辑。
这里我怀疑我的问题可能是一个更大的设计缺陷,所以我在寻找如何做到这一点,否则一个更好的主意一个答案,也许有一些原因,这个设计是一个坏主意。
我知道我可以通过不允许日期跨度横跨12月31日去做到这一点。但是,这个应用程序的很多用户都有一个从11月到2月的时间段,这是他们最慢的几个月。他们最终会创建两个不同的日期范围,其中包含相同的数据,一个用于11月/ 12月,另一个用于1月/ 2月。
我正在使用SQL Server作为前端应用程序的数据库和MS Access。我可以使用T-SQL或Access VBA,因此您的解决方案可以位于任一个中。
'我建议你把你的日期存储为两个单独的列'你能澄清一下吗?你是否建议他们是日期栏?我想知道是否可以更好地将我的股票日期存储为DayOfYearNumber。然后,我所要做的就是获取CurrentDayOfYearNumber,并找出它适合哪个范围。这样做肯定会更快,并且可以使用索引,不是吗? – HK1
我的想法是介绍月和日,这样更容易维护系统。但是你的想法应该是更好的表现。然后,您可以应用类似的where子句。 – OzrenTkalcecKrznaric