Sql Oracle分析服务返回错误/意外的结果
编写SQL查询,该查询应返回前91天窗口的平均费用。我将日期截短到一周的第一天,并期望91天的平均值为该日期之前的91天 但是,在验证时,91天的平均值似乎包括了我截断的当前一周 查询:Sql Oracle分析服务返回错误/意外的结果,sql,oracle,date,analytics,Sql,Oracle,Date,Analytics,编写SQL查询,该查询应返回前91天窗口的平均费用。我将日期截短到一周的第一天,并期望91天的平均值为该日期之前的91天 但是,在验证时,91天的平均值似乎包括了我截断的当前一周 查询: SELECT week AS WEEK, to_char(week,'ww-yyyy') AS Week_num --Sum of the charges for the previous 91 days / 91 will give you avg charges per day fo
SELECT
week AS WEEK,
to_char(week,'ww-yyyy') AS Week_num
--Sum of the charges for the previous 91 days / 91 will give you avg charges per day for the last 91 days
--Need to count days regardless of if there are any charges on that day
,(SUM(CHARGES) OVER (ORDER BY WEEK RANGE INTERVAL '91' DAY PRECEDING))/91 MV_91_DAY_AVG
FROM
(
SELECT
--Truncate date down to first of week. Goal is to make 91 day preceding being at this date.
TRUNC(TRANS.ORIG_POST_DATE,'WW') AS WEEK
,SUM(TRANS.AMOUNT) AS CHARGES
FROM TRANS
WHERE
TRANS.DETAIL = "Charge"
GROUP BY TRUNC(TRANS.ORIG_POST_DATE,'WW')
)
ORDER BY WEEK
电流输出:
在除法之前先减去当前值
,(SUM(CHARGES) OVER (ORDER BY WEEK RANGE INTERVAL '91' DAY PRECEDING) - CHARGES)/91
我想你希望你的窗口条款是:
(ORDER BY WEEK RANGE BETWEEN INTERVAL '91' DAY PRECEDING AND INTERVAL '1' DAY PRECEDING)
以排除本周的费用
您可能还想将“91”改为“92”,以便在开始时增加一周。我尝试了一下,但没有掷骰子。它完全改变了数字。现在,这些数字是正确的,只是被一周的时间抵消了。不过谢谢你的建议……;)这真是太棒了。所以我必须承认,我仍然不明白为什么我的查询占据了本周,是什么让你排除了它。如果你有时间解释一下,那就太好了。或者请随意给我指一些我应该回顾的文档。我只是不知道该去哪里找。不管怎样。。。非常感谢@Cimplicity:您刚刚给出了要包含的范围的起点。默认终点是当前行,且包含该行。通过显式设置
INTERVAL
1`DAY previous`的端点,当前行将被排除。如果您有类似于我上面的问题,我强烈建议您查看此Oracle分析函数概述,可在youtube上的Sheepsquezers频道或。