Oracle:需要计算过去三个月的滚动平均值,其中我们每个月有多个提交

极权主义者

我已经看过许多在oracle中滚动平均的示例,但是确实做了我想要的。

这是我的原始数据

DATE            SCORE   AREA
----------------------------
01-JUL-14       60      A
01-AUG-14       45      A
01-SEP-14       45      A
02-SEP-14       50      A
01-OCT-14       30      A
02-OCT-14       45      A
03-OCT-14       50      A
01-JUL-14       60      B
01-AUG-14       45      B
01-SEP-14       45      B
02-SEP-14       50      B
01-OCT-14       30      B
02-OCT-14       45      B
03-OCT-14       50      B

这是我的滚动平均值的理想结果

MMYY        AVG     AREA
-------------------------
JUL-14      60      A
AUG-14      52.5    A
SEP-14      50      A
OCT-14      44      A
JUL-14      60      B
AUG-14      52.5    B
SEP-14      50      B
OCT-14      44      B

我需要它的工作方式是,对于每个MMYY,我需要回顾3个月,然后AVG每部门的得分。例如

对于OCT的A区,从八月开始的最近三个月中,进行了6个研究,(45 + 45 + 50 + 30 + 45 + 50)/ 6 = 44.1

通常我会这样写查询

SELECT
  AREA, 
  TO_CHAR(T.DT,'MMYY') MMYY,
  ROUND(AVG(SCORE)
    OVER (PARTITION BY AREA ORDER BY TO_CHAR(T.DT,'MMYY') ROWS BETWEEN 2 PRECEDING AND CURRENT ROW),1)
    AS AVG 
    FROM T

这将查看最近的3个输入,而不是最近的3个月

戈登·利诺夫

一种方法是将聚合函数与分析函数混合。平均值的关键思想是避免使用avg()取而代之sum()count(*)

  SELECT AREA, TO_CHAR(T.DT, 'MMYY') AS MMYY,
         SUM(SCORE) / COUNT(*) as AvgScore,
         SUM(SUM(SCORE)) OVER (PARTITION BY AREA ORDER BY MAX(T.DT) ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) / SUM(COUNT(*)) OVER (PARTITION BY AREA ORDER BY MAX(T.DT) ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
  FROM t
  GROUP BY AREA, TO_CHAR(T.DT, 'MMYY') ;

注意该order by条款。如果您的数据跨越几年,则使用MMYY格式会带来问题。几个月之内最好使用YYYY-MM之类的格式,因为字母顺序与自然顺序相同。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

计算每个月最近12个月的平均值?

来自分类Dev

Pyspark:每个月累计前三个月的总和

来自分类Dev

如何对一个数据帧进行三个月的平均值,并使用这些值构建一个新的?

来自分类Dev

三个月内每五个月滚动一次

来自分类Dev

Oracle SQL:获取过去3个月的平均值并添加其他列

来自分类Dev

过去三个月在mdx查询中的最小值

来自分类Dev

如何从日期参数中选择过去三个月的数据

来自分类Dev

尝试获取最近三个月的数据

来自分类Dev

动态获取最近三个月

来自分类Dev

前三个月的值的总和

来自分类Dev

SQL最近三个月

来自分类Dev

根据最近三个月的销售额计算不同的客户

来自分类Dev

如何从Presto的SQL(Athena)中计算从开始算起的每个月的平均值?

来自分类Dev

用Java计算每三个月的第三个星期一?

来自分类Dev

六个月期间的平均值

来自分类Dev

六个月期间的平均值

来自分类Dev

PHP检查两个日期是否至少相差三个月

来自分类Dev

在PowerBI中未正确计算过去12个月的总和

来自分类Dev

SQL获取本月前三个月的月份的第一天

来自分类Dev

PowerBI DAX:前三个月的日期期限标识公式发布

来自分类Dev

此数据集最近三个月的总计数是多少?

来自分类Dev

用户使用Twitter API如何获取最近三个月以来的推文

来自分类Dev

获取最近三个月按商店销售的发票数

来自分类Dev

如何在单个查询中获取最近三个月的数据

来自分类Dev

如何获取SQL Server中前三个月的日期列?

来自分类Dev

每三个月自动编辑查询 MySQL 的 WHERE 条件

来自分类Dev

MySQL查询以获取每个月数据的平均值数组

来自分类Dev

如何在这样的数据框中获得每个月的平均值?

来自分类Dev

我想知道如何定义一个指标来计算特定事实(包括当月)的12个月移动平均值

Related 相关文章

  1. 1

    计算每个月最近12个月的平均值?

  2. 2

    Pyspark:每个月累计前三个月的总和

  3. 3

    如何对一个数据帧进行三个月的平均值,并使用这些值构建一个新的?

  4. 4

    三个月内每五个月滚动一次

  5. 5

    Oracle SQL:获取过去3个月的平均值并添加其他列

  6. 6

    过去三个月在mdx查询中的最小值

  7. 7

    如何从日期参数中选择过去三个月的数据

  8. 8

    尝试获取最近三个月的数据

  9. 9

    动态获取最近三个月

  10. 10

    前三个月的值的总和

  11. 11

    SQL最近三个月

  12. 12

    根据最近三个月的销售额计算不同的客户

  13. 13

    如何从Presto的SQL(Athena)中计算从开始算起的每个月的平均值?

  14. 14

    用Java计算每三个月的第三个星期一?

  15. 15

    六个月期间的平均值

  16. 16

    六个月期间的平均值

  17. 17

    PHP检查两个日期是否至少相差三个月

  18. 18

    在PowerBI中未正确计算过去12个月的总和

  19. 19

    SQL获取本月前三个月的月份的第一天

  20. 20

    PowerBI DAX:前三个月的日期期限标识公式发布

  21. 21

    此数据集最近三个月的总计数是多少?

  22. 22

    用户使用Twitter API如何获取最近三个月以来的推文

  23. 23

    获取最近三个月按商店销售的发票数

  24. 24

    如何在单个查询中获取最近三个月的数据

  25. 25

    如何获取SQL Server中前三个月的日期列?

  26. 26

    每三个月自动编辑查询 MySQL 的 WHERE 条件

  27. 27

    MySQL查询以获取每个月数据的平均值数组

  28. 28

    如何在这样的数据框中获得每个月的平均值?

  29. 29

    我想知道如何定义一个指标来计算特定事实(包括当月)的12个月移动平均值

热门标签

归档