请让我知道以下内容是否偏离主题、不清楚、太具体或太复杂而无法理解。我认为以下是描述、理解和解决的挑战。
CIF=cost, insurance, frieght(基本上就是进口价值)
输入表(导入)的简化版本如下所示:
在此处输入图像描述 因此,从一月到六月,值 1 分配给 SixMonthPeriod 列,其余月份的值分配为 2。
然后我想计算六个时期的单价,因此我使用
select SixMonthPeriod, ProductDescrip, Sum(weight), Sum (CIF), (Sum (CIF))/(Sum(weight)) as UnitPrice
from Import
group by SixMonthPeriod, ProductDescrip;
这很好,但是我想计算需要使用滞后(oracle 分析函数)的每个产品(超过六个月)的通货膨胀。六个月的期限必须固定。因此,如果特定产品的上一期缺失,则单价应为零。我想重新开始/开始计算每种产品的通货膨胀。单价和通货膨胀方程分别如下所示:
单价=(六个月期间的总和(重量))/(六个月期间的总和(CIF))通货膨胀=(当前单价 - 先前单价)/(先前单价)
我使用以下 SQL 计算每个产品六个月的通货膨胀率,其中每个产品的计算再次开始:
select Yr, SixMthPeriod, Product, UnitPrice, LagUnitPrice, ((UnitPrice -LagUnitPrice)/LagUnitPrice) as inflation
from (select Year as Yr, SixMonthPeriod as SixMthPeriod,
ProductDescrip as product, (Sum (CIF))/(Sum(weight)) as UnitPrice,
lag((Sum (CIF))/(Sum(weight)))
over (partition by ProductDescrip order by YEAR, SixMonthPeriod) as LagUnitPrice
From Import
group by Year, SixMonthPeriod, ProductDescrip)
问题是通货膨胀期不固定。
例如,对于结果,我得到以下信息:
在此处输入图像描述 前两行很好,应该有空值,因为它们是我的第一行,因此没有 LagUnitPrice 和通货膨胀。
第三行有一个问题,它采用 0.34 作为 LagUnitPrice 但实际上它为零(对于 2016 年期间,产品大麦的 SixMthPeriod=1)。oracle 分析函数不考虑缺失的行(例如,对于 2016 年期间,产品大麦的 SixMthPeriod=1)。
我该如何解决这个问题(如果你理解我的话)?
我有 96 行,因此我可以将文件导出到 excel,并使用 excel 的公式来修复这些异常。