【发布时间】:2018-05-03 06:11:24
【问题描述】:
我在 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 个月,并平均每个部门的分数。例如,
对于 OCT 的 A 区,从 10 月开始的最近 3 个月内,有 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 个月
【问题讨论】:
-
Average = total sum / total count,不是吗?查看答案。