我有一张包含库存交易的表格。一个简化的例子:
--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
部分也会失败) )。
解决此问题的最佳方法是什么?