我们正在尝试从单个sql语句中的移动表中计算平均存量。
就我们而言,我们认为标准方法没有问题,而不是将每日库存加起来除以天数,因为我们没有每日库存,我们只需添加(运动*)剩下的几天):
select sum(quantity*(END_DATE-move_date))/(END_DATE-START_DATE)
from move_table
where move_date<=END_DATE
这是一个简化的例子,在现实生活中我们已经在开始日期处理初始库存。假设在start_date之前没有移动。 数量标志取决于移动类型(销售,购买,库存等)。 当然这是按产品,仓库进行分组......但是你明白了。 它按预期工作,微积分很好。
但是(总有一个“但是”),我们的客户不喜欢没有库存的会计日(所有库存都已售罄)。所以,他不喜欢
(daily_stock)/ number_of_days的总和(这是我们用不同的数学计算的)
相反,他想要Sum of (daily stock) / number_of_days_in_which_stock_is_not_zero
我们可以毫不费力地使用任何编程语言来完成这项任务,但我想知道如何使用普通的sql来完成它...并且无法提供解决方案。
有什么建议吗?
答案 0 :(得分:0)
考虑创建一个名为Stock_EndOfDay_History的新表,其中包含以下列。
此表格将在前一天的新日期开始时为每个库存商品获取一个新行。一旦适用的日期值超出感兴趣的日期窗口,就可以从该表中清除行。
要获得&#34; number_of_days_in_which_stock_is_not_zero&#34;,请使用此功能。
SELECT COUNT(*) AS 'Not_Zero_Stock_Days' FROM Stock_EndOfDay_History
WHERE stock# = <stock#_value>
AND <date_window_clause>
其他方法可能会尝试仅将新列添加到现有库存表中以维持&#34;的累积总和。 number_of_days_in_which_stock_is_not_zero&#34 ;.但不可避免地会问到如何计算非零库存天数的问题?使用这种新的表格方法将比新的列方法更好地解决这些问题。