在庫トランザクションのテーブルがあります。簡単な例:
--Inventory Transactions
Date Sold Purchased Balance(not in table)
Today 1 -5
Yesterday 6 -4
5 days ago 5 +2
10 days ago 103 -3
20 days ago 100 +100
要件は、記事の残高がマイナス(在庫切れ)であった日をレポートに含める必要があることを示しています。上記の例では、答えとして昨日を意味します。
これをSQLに変換しようとしていますが、問題が発生しています。私はCTEを使用してみました:
with Stockouts as (
select getdate() as [Date],
(calculation) as Balance
from [Inventory Transactions]
--some constraints to get the correct article are omitted
union all
select dateadd(dd, -1, Stockouts.[Date]) as [Date],
Stockouts.Balance - (calculation) as Balance
from [Inventory Transactions]
inner join Stockouts
)
しかし、再帰部分でサブクエリを使用できず(現在のトランザクションの前の最後のトランザクションを見つけるため)、特定の日付にトランザクションがない場合、内部結合がループを停止するという問題があります(したがって、dateadd
部分も失敗します) )。
この問題を解決するための最良のアプローチは何でしょうか?