月と日のみを使用して、重複しない複数の日付期間を定義するテーブルがあります。これは基本的に、季節的なビジネスのために年間を通じてさまざまな量を在庫できるようにする、在庫アイテムの「在庫」テーブルです。以下は、単一のアイテムの在庫テーブルがどのように見えるかの例です。ここには示していない 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 月までの期間が最も遅い月です。1 つは 11 月/12 月用、もう 1 つは 1 月/2 月用です。
データベースには SQL Server を、フロントエンド アプリケーションには MS Access を使用しています。T-SQL または Access VBA を使用できるため、ソリューションはどちらでもかまいません。