首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用SQL计算时间序列数据的ADI和COV?

如何使用SQL计算时间序列数据的ADI和COV?
EN

Stack Overflow用户
提问于 2022-02-09 19:12:13
回答 1查看 354关注 0票数 1

我试图使用SQL对时间序列数据进行分类。我有一个3年以上的参考数据点的数据。因此,参考发生36次,每个月一次。有时数量为0,而另一些时候,每一行的数量可能是25甚至更高。我想知道的是如何使用SQL (特别是MSSQL)计算这些方程。

然后,类似地,我希望将数据分类为ErraticSmoothLumpy和/或Intermittent 如图所示

需求平稳(ADI < 1.32,CV< 0.49)。需求在时间和数量上都是很有规律的。因此,这是很容易预测,您将不会有困难达到一个较低的预测错误水平。 间歇性需求(ADI、>=、1.32和CV均< 0.49)。需求历史表明,需求数量变化很小,但两种需求之间的间隔变化很大。虽然具体的预测方法解决了间歇性需求,但预测误差要大得多。 需求波动(ADI < 1.32,CV 2 >= 0.49)。需求在时间上有规律的发生,而且数量变化很大。你的预测精度仍然不稳定。 块状需求(ADI >= 1.32和CV 2 >= 0.49)。这种需求的特点是数量和时间变化很大。事实上,无论你使用哪种预测工具,都不可能做出可靠的预测。这种特殊的需求模式是无法预测的。

下面是生成我正在处理的表的查询。

代码语言:javascript
复制
SELECT
distinct
CHAN_ID
,PROD_CD
,CP_REF
,PARENT
,ORDERED_DATE
,QUANTITY
FROM DF_ALL_DEMAND_BY_ROW_V
where parent is not null

CP_REF是我关注的ID。

下面是前12行的示例。

请问你是否需要更清晰。我的SQL技能还不够基本。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-09 21:20:57

代码语言:javascript
复制
with data as (
    select
        CP_REF,
        count(*) * 1.0 /
          nullif(count(case when QUANTITY > 0 then 1 end), 0) as ADI,
          stdevp(QUANTITY) / nullif(avg(QUANTITY), 0) as COV
    from DF_ALL_DEMAND_BY_ROW_V
    where parent is not null
    group by CP_REF
)
select
    CP_REF, ADI, COV,
    case
        when ADI <  1.32 and COV <  0.49 then 'Smooth'
        when ADI >= 1.32 and COV <  0.49 then 'Intermittent'
        when ADI <  1.32 and COV >= 0.49 then 'Erratic'
        when ADI >= 1.32 and COV >= 0.49 then 'Lumpy'
        else 'Smooth'
    end as DEMAND
from data;

重复检查您想要使用的是stdevp()而不是stdev。我希望我对统计学有更多的了解。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71055377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档