我有一个表(日期,有效负载),其中包含约10年的数据,我想基于14天(2周)和90天(12周)的间隔计算移动平均值(MA),以显示有效负载的趋势
我已经写了这个查询,但是它得到了错误的值
SELECT x.*,
ABS (LTMA-STMA) DIFFERECNE
FROM
(SELECT SDATE,
PAYLOAD,
AVG(PAYLOAD) OVER (ORDER BY W ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) STMA,
AVG(PAYLOAD) OVER (ORDER BY W ROWS BETWEEN 12 PRECEDING AND CURRENT ROW) LTMA
FROM
(SELECT b.*,
TO_NUMBER(TO_CHAR( X.SDATE, 'W')) W
FROM
(SELECT TO_DATE(TO_CHAR(a.SDATE, 'YYYY-MM-DD'), 'YYYY-MM-DD') SDATE,
SUM(a.PAYLOAD) PAYLOAD
FROM TABLE_PAYLOAD a
WHERE a.SDATE > sysdate - 3 * 365
GROUP BY TO_CHAR(a.SDATE, 'YYYY-MM-DD')
ORDER BY TO_CHAR(a.SDATE, 'YYYY-MM-DD')
) b )
ORDER BY SDATE
) x;
实际上我知道是什么MA
,但我不了解Oracle的工作原理!
我可以MA
在Excel中进行计算,但是我需要在数据库级别执行此操作,能否请您告诉我如何执行此操作?
我不明白使用的目的是TO_CHAR(SDATE, 'W')
什么?根据文档,这应该为您提供当月的星期数…
无论如何,我试图简化查询,希望它仍然可以满足您的需求:
SELECT x.*, ABS (LTMA-STMA) DIFFERENCE
FROM
(
SELECT SDATE, PAYLOAD,
AVG(PAYLOAD) OVER (ORDER BY SDATE rows BETWEEN 14 PRECEDING AND CURRENT ROW) STMA,
AVG(PAYLOAD) OVER (ORDER BY SDATE rows BETWEEN 90 PRECEDING AND CURRENT ROW) LTMA
FROM
(
SELECT a.SDATE, SUM(a.PAYLOAD) PAYLOAD
FROM TABLE_PAYLOAD a
WHERE a.SDATE > sysdate - 3 * 365
GROUP BY a.SDATE
)
) x
ORDER BY SDATE;
PS:这样做我也看不到要点TO_DATE(TO_CHAR(a.SDATE, 'YYYY-MM-DD'), 'YYYY-MM-DD')
,这相当于a.SDATE
…
Support for the Oracle database. The following table summarizes current support levels for database release versions. 支持的Oracle版本 The following dialect/DBAPI options are available. Please refer to ind
我刚接触oracle forms,遇到了一个问题。我在表单中有两个具有相同字段的多个记录块。 我查询一个块的数据,它被填充。 哪里有一种方法可以将所有行从填充的块复制到“复制”块?
问题内容: 在OracleDoc中没有表达式背后的例子,所以我尝试使用Java语法,这应该在查询后得到任何数字 但是什么也没显示! 问题答案: 出于争论的考虑,REGEXP_SUBSTR也可以工作:
Python是否有一个SciPy函数或NumPy函数或模块来计算给定特定窗口的一维数组的运行平均值?
我需要一个特定的业务场景来设置一个实体(不是PK)上的字段,一个序列中的数字(序列必须是最小值和最大值之间的数字) 我这样定义序列: 在Java代码中,我从序列中检索数字,如下所示: 我的问题是: 如果我在一个事务中调用这个“中选择mySequence.nextval”,同时在另一个事务中调用相同的方法(并行请求),那么确定序列返回的值是不同的吗? 不可能从第一个事务中读取未提交的值吗? 因为假设
问题内容: 我正在写一个查询,以查找收入高于其部门平均工资的员工。我需要显示员工ID,薪水,部门ID和该部门的平均工资。 我有一个几乎可以正常使用的查询,但它一直显示“ ORA-00904:“ AVG_SAL”:无效标识符”错误。我正确地做到了吗?为什么会出现此无效的标识符错误? 问题答案: 我不相信您可以在WHERE子句中引用列别名(在这种情况下为avg_sal)。 您需要重复该内部查询,即: